我将一小段示例代码与linqpad放在一起,以显示WCF Web服务调用,而无需从WSDL创建代理类。这是我所拥有的:
using (var wb = new WebClient())
{
wb.Credentials = CredentialCache.DefaultNetworkCredentials;
wb.Headers.Add("Content-Type: text/xml;charset=UTF-8");
wb.Headers.Add("SOAPAction: \"http://tempuri.org/Core/Project_GetNumberForExternalUse\"");
String requestString = @"
<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:tem=""http://tempuri.org/"">
<soapenv:Header/>
<soapenv:Body>
<tem:Project_GetNumberForExternalUse>
<!--Optional:-->
<tem:extData1>ext 1</tem:extData1>
<!--Optional:-->
<tem:extData2>ext 2</tem:extData2>
<!--Optional:-->
<tem:extData3>ext 3</tem:extData3>
<!--Optional:-->
<tem:extData4>ext 4</tem:extData4>
<!--Optional:-->
<tem:extDataLong>ext 1ext 1ext 1ext 1ext 1</tem:extDataLong>
</tem:Project_GetNumberForExternalUse>
</soapenv:Body>
</soapenv:Envelope>
";
var response = wb.UploadString("http://myserver:55002/Core.svc", "POST", requestString);
response.Dump();
}
连接到localhost而不是myserver时,此方法工作正常。WCF服务配置为使用Windows身份验证。基于错误,我猜测问题是授权中未包含服务主体名称。如果我将WCF客户端与代理一起使用,请在“终结点/身份”配置部分中解决此问题。但是,我没有看到在代码中设置此方法的方法。有没有办法做到这一点?还有其他方法可以解决此要求吗?
尝试使用AuthenticationManager.CustomTargetNameDictionary指定通过WebClient调用该URL时要使用的SPN:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句