我收到了一个用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);
这段代码会运行并抛出以下异常:
HTTP请求未经客户端身份验证方案“匿名”授权。从服务器收到的身份验证标头为“Basic realm=realm”。
并且它还有一个内部异常:
远程服务器返回错误:(401) 未经授权。
请问您认为可能是什么原因导致了这个问题?非常感谢。