gpt4 book ai didi

wcf - 元数据包含无法为 iis 托管的 wcf 服务解析的引用

转载 作者:行者123 更新时间:2023-12-04 17:07:03 25 4
gpt4 key购买 nike

需要任何帮助我有一个示例服务和一个测试控制台应用程序我通过将同一 soln 的引用添加到控制台 appln 来访问示例服务元数据,并且我正在获取绑定(bind)信息。我也在 IIS 中托管(发布)相同的服务,并在测试控制台应用程序中通过服务 URL 添加引用,我正在获取结果。

现在问题出在我在 IIS 中托管(发布)的运行数据服务上,我正在添加引用并尝试从服务 URL 中读取元数据,它给我错误。元数据包含无法解析的引用:“http://localhost:9092/TransactionDataService.svc/mex”

我在两个(示例 + 我正在运行的数据服务)案例中都使用 mexhttpbinding 和 multiplebingind = true

示例服务的网络配置

<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>

访问数据服务的元数据的代码是相同的,除了 serviec url

最佳答案

看看您是否有机会忘记使用 [DataContract] 属性装饰您的传输类(也不要忘记 [DataMember])。

关于wcf - 元数据包含无法为 iis 托管的 wcf 服务解析的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6749016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com