J'ai un service Web ASMX qui nécessite un en-tête de savon et une application cliente consommant ce service via une référence de service (WCF).Client WCF consommant un service Web ASMX avec en-tête de savon
Serveur:
[WebService(Namespace = "http://myserviceurl.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service1 : System.Web.Services.WebService
{
public MyCustomSoapHeader MyHeader;
[WebMethod]
[SoapHeader("MyHeader", Direction = SoapHeaderDirection.In)]
public string MyMethod()
{
if(MyHeader.SomeProperty == false)
{
return "error";
}
return "success";
}
public class MyCustomSoapHeader: SoapHeader
{
public bool SomeProperty { get; set; }
}
}
Client:
public class MyClient
{
var address = new EndpointAddress(_myServerUrl)
var binding = new BasicHttpBinding();
binding.Name = "SoapBinding";
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
binding.ReceiveTimeout = TimeSpan.FromSeconds(_timeout);
Service1SoapClient client = new Service1SoapClient(binding, address);
string expected = client.MyMethod(new MyCustomSoapHeader(){SomeProperty = true});
}
Trace de la pile:
System.ServiceModel.FaultException: Server was unable to process request. ---> Computer name could not be obtained. Server stack trace: at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc) at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs) at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Comment puis-je résoudre ce problème sur le côté client à l'aide encore WCF? Je suis incapable de changer le code du serveur et j'ai besoin d'utiliser WCF sur le client, je ne peux pas ajouter de référence Web.
L'URL pour le client est "http: //MyServer/Services/Service1.asmx". Pour le développement, le client s'exécute sur la même machine que le service. Cependant, dans la production ce ne sera pas. J'ai l'intuition que c'est un problème environnemental et non un problème de WCF, mais ce serait formidable si nous pouvions faire fonctionner le service et le client sur la même boîte à des fins de développement/test. Le service fonctionne bien avec les clients non-WCF. – Adam
Étant donné que les deux sont sur la même machine, cela fonctionne-t-il si vous spécifiez l'URL avec localhost au lieu de MyServer? On dirait qu'un problème de DNS pourrait être gênant. – tomasr
J'ai juste essayé de changer le point de terminaison en localhost. Même exception – Adam