C# 使用MetadataExchangeClient时设置凭据

C# 使用MetadataExchangeClient时设置凭据,c#,service,web,C#,Service,Web,如果能在这方面得到一些帮助,我将不胜感激——我觉得我肯定错过了一些显而易见的东西。我想使用System.ServiceModel.Description.MetadataExchangeClient检索有关Web服务的信息。如果Web服务是不安全的,那么我就没有问题,但是如果Web服务是由Windows身份验证保护的WCF服务,那么我会得到如下错误:元数据包含无法解决的引用:'http://server/Service.svc?WSDL" 我的代码相当简单: Uri endpointUri =

如果能在这方面得到一些帮助,我将不胜感激——我觉得我肯定错过了一些显而易见的东西。我想使用System.ServiceModel.Description.MetadataExchangeClient检索有关Web服务的信息。如果Web服务是不安全的,那么我就没有问题,但是如果Web服务是由Windows身份验证保护的WCF服务,那么我会得到如下错误:元数据包含无法解决的引用:'http://server/Service.svc?WSDL"

我的代码相当简单:

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