C# 使用MetadataExchangeClient时设置凭据
如果能在这方面得到一些帮助,我将不胜感激——我觉得我肯定错过了一些显而易见的东西。我想使用System.ServiceModel.Description.MetadataExchangeClient检索有关Web服务的信息。如果Web服务是不安全的,那么我就没有问题,但是如果Web服务是由Windows身份验证保护的WCF服务,那么我会得到如下错误:元数据包含无法解决的引用:'http://server/Service.svc?WSDL" 我的代码相当简单:C# 使用MetadataExchangeClient时设置凭据,c#,service,web,C#,Service,Web,如果能在这方面得到一些帮助,我将不胜感激——我觉得我肯定错过了一些显而易见的东西。我想使用System.ServiceModel.Description.MetadataExchangeClient检索有关Web服务的信息。如果Web服务是不安全的,那么我就没有问题,但是如果Web服务是由Windows身份验证保护的WCF服务,那么我会得到如下错误:元数据包含无法解决的引用:'http://server/Service.svc?WSDL" 我的代码相当简单: Uri endpointUri =
Uri endpointUri = new Uri("http://server/Service.svc?WSDL");
System.ServiceModel.Description.MetadataExchangeClient mexClient = new System.ServiceModel.Description.MetadataExchangeClient(endpointUri, System.ServiceModel.Description.MetadataExchangeClientMode.HttpGet);
mexClient.ResolveMetadataReferences = true;
System.Net.NetworkCredential mexNetworkCredentials = new System.Net.NetworkCredential(username, password, domain);
mexClient.HttpCredentials = mexNetworkCredentials;
System.ServiceModel.Description.MetadataSet metadataSet = mexClient.GetMetadata(endpointUri, System.ServiceModel.Description.MetadataExchangeClientMode.HttpGet);
我是不是在客户端指定身份验证的方式上遗漏了什么?我在谷歌上搜索了一个示例代码,但似乎没有任何东西符合我的想法
以下是Web.config文件(略经编辑):
谢谢你的帮助,马丁。我会回答我自己的问题,希望这能帮助其他人。我通过将以下XML块添加到App.config文件中启用了客户端跟踪:
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "D:\log\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
希望这能节省一些时间 你能从你的WCF服务发布Web.config文件吗?嗨,我已经将Web.config文件添加到了主帖子中。无法将XML格式化为漂亮的格式。谢谢你的帮助!
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "D:\log\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
BasicHttpBinding basicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
basicHttpBinding.MaxReceivedMessageSize = 52428800;
System.Xml.XmlDictionaryReaderQuotas xmlDictionaryReaderQuotas = new XmlDictionaryReaderQuotas();
xmlDictionaryReaderQuotas.MaxNameTableCharCount = 2147483647;
basicHttpBinding.ReaderQuotas = xmlDictionaryReaderQuotas;
System.ServiceModel.Description.MetadataExchangeClient mexClient = new System.ServiceModel.Description.MetadataExchangeClient(basicHttpBinding);
mexClient.MaximumResolvedReferences = 1000;
System.ServiceModel.Description.MetadataSet metadataSet = mexClient.GetMetadata(endpointUri, System.ServiceModel.Description.MetadataExchangeClientMode.HttpGet);