любая помощь приветствуется. У меня есть один образец службы и одно тестовое консольное приложение. У меня есть доступ к метаданным образца службы, добавляя ссылку из того же решения в консольное приложение, и я получаю информацию о привязке. также я размещаю (публикацию) ту же службу в IIS и добавляю ссылку через URL-адрес службы в приложении Test Console, и я получаю результат.
Теперь проблема заключается в том, что моя запущенная служба данных, размещенная (опубликованная) в IIS, я добавляю ссылку и пытаюсь прочитать метаданные из URL-адреса службы, что дает мне ошибку. Метаданные содержат неразрешимую ссылку: 'http://localhost:9092/TransactionDataService.svc/mex'.
Я использую mexhttpbinding с multibinding = true в обоих случаях (образец + моя работающая служба данных)
веб-конфигурация для samp-le serviec
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="ServiceApp.Service1">
<endpoint address="" binding="wsHttpBinding" name="Service1Endpoint" contract="ServiceApp.IService1"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
Код для доступа к метаданным
EndpointAddress serviceEndpointAddress = new EndpointAddress("http://localhost:30617/Service1.svc/mex");
var endpointCollection = MetadataResolver.Resolve(typeof(IService1), serviceEndpointAddress);
foreach (var endpoint in endpointCollection)
{
Type bindingType = endpoint.Binding.GetType();
if (bindingType.Equals(typeof(WSHttpBinding)))
{
Console.WriteLine("Eureka!!!");
}
}
веб-конфигурация для службы данных
<bindings>
<wsHttpBinding>
<binding name="WSHttp" openTimeout="01:00:00" closeTimeout="01:00:00" sendTimeout="01:00:00" receiveTimeout="01:00:00" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="0" maxReceivedMessageSize="2147483647">
<reliableSession enabled="true" />
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
</wsHttpBinding>
</bindings>
<!--Service Behaviors-->
<behaviors>
<serviceBehaviors>
<behavior name="DataAccessBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<!--Service Configuration-->
<services>
<service name="TransactionDataAccess" behaviorConfiguration="DataAccessBehavior">
<endpoint name="DataAccessServiceEndpoint" address="" binding="wsHttpBinding" bindingConfiguration="WSHttp" contract="TransactionDataServices.ITransactionDataService"/>
<endpoint address="mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<directoryBrowse enabled="true" />
</system.webServer>
Код для доступа к метаданным для службы данных такой же, за исключением URL-адреса службы.