为什么MetadataExchangeClient无法在Powershell中运行?

时间:2013-09-12 22:27:46

标签: wcf powershell-v3.0

我正在尝试执行以下操作:

$basicHttpBinding = New-Object System.ServiceModel.BasicHttpBinding([System.ServiceModel.BasicHttpSecurityMode]::TransportCredentialOnly);
$basicHttpBinding.Security.Transport.ClientCredentialType = [System.ServiceModel.HttpClientCredentialType]::Windows;
$basicHttpBinding.MaxBufferSize = 65536000;
$basicHttpBinding.MaxReceivedMessageSize = 65536000;
$basicHttpBinding.MaxBufferPoolSize = 524288;
$basicHttpBinding.CloseTimeout = "01:01:00";
$basicHttpBinding.OpenTimeout = "01:01:00";
$basicHttpBinding.ReceiveTimeout = "01:01:00";
$basicHttpBinding.SendTimeout = "01:01:00";
$mexClient = New-Object System.ServiceModel.Description.MetadataExchangeClient($basicHttpBinding);
$mexClient.MaximumResolvedReferences = [System.Int32]::MaxValue
$metadataSet = $mexClient.GetMetadata([Uri]$WsdlUrl, $mode)

看来无论出于何种原因,MexClient都没有传递凭据。我这样说是因为当我浏览IE中运行与脚本相同的用户的$ WsdlUrl时,我可以看到wsdl就好了。当我运行上面的代码时,我得到一个例外:

  

使用“2”参数调用“GetMetadata”的异常:“元数据包含一个引用                           无法解决:'http_:// myServer:myPort / myVirtualDirectory / myWcfService.svc?wsdl'。“---> System.InvalidOperationException:元数据包含一个                           无法解析的引用:'http_:// myServer:myPort / myVirtualDirectory / myWcfService.svc?wsdl'。 ---> System.Net.WebException:远程                           服务器返回错误:(401)未经授权。


编辑01

MetadataExchangeClient似乎也没有通过http发送请求。当我使用fiddler时,没有'request'被发送,只有失败的HTTP响应。如何通过http发送和接收MexClient?

1 个答案:

答案 0 :(得分:0)

我失踪了:

$mexClient.HttpCredentials = [System.Net.CredentialCache]::DefaultNetworkCredentials;

在我的GetMetaData调用之前。我认为绑定要求足以让MexClient知道它应该传递默认凭据,但这种情报太乐观了。希望这有助于某人。