我已经获得了一个用Java编写的Web服务,我无法对其进行任何更改.它要求用户通过基本身份验证进行身份验证才能访问任何方法.在.NET中与此服务交互的建议方法是使用安装了WSE 3.0的Visual Studio 2005.
这是一个问题,因为该项目已经在使用Visual Studio 2008(面向.NET 2.0).我可以在VS2005中做到这一点,但我不想将项目与VS2005联系起来,或者通过在VS2005中创建一个程序集来实现它,并将其包含在VS2008解决方案中(无论如何,该程序基本上将项目绑定到2005,以便将来对程序集进行任何更改).我认为这些选项中的任何一个都会通过强制他们安装WSE 3.0并使项目无法在将来使用2008和.NET 3.5中的功能而使新开发人员变得复杂......即,我真的相信使用WCF是要走的路.
我一直在考虑使用WCF,但是我不确定如何让WCF服务理解它需要发送身份验证标头以及每个请求.当我尝试使用Web服务执行任何操作时,我收到401错误.
这就是我的代码:
WebHttpBinding webBinding = new WebHttpBinding();
ChannelFactory<MyService> factory =
new ChannelFactory<MyService>(webBinding, new EndpointAddress("http://127.0.0.1:80/Service/Service/"));
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
factory.Credentials.UserName.UserName = "username";
factory.Credentials.UserName.Password = "password";
MyService proxy = factory.CreateChannel();
proxy.postSubmission(_postSubmission);
Run Code Online (Sandbox Code Playgroud)
这将运行并抛出以下异常:
HTTP请求未经授权,客户端身份验证方案为"匿名".从服务器收到的身份验证标头是"Basic realm = realm".
这有一个内在的例外:
远程服务器返回错误:(401)未经授权.
任何关于可能导致这个问题的想法将不胜感激.