我在调用标有WebInvoke Method ='GET'的WCF方法时遇到问题。 这是我的代码:
WCF主持人:
var baseUri = new Uri("http://localhost:8099/hello");
// Create the ServiceHost.
using (var serviceHost = new ServiceHost(typeof(HelloWorldService), baseUri))
{
var serviceEndpoint = serviceHost.AddServiceEndpoint(typeof(IHelloWorldService), new WebHttpBinding(), "");
serviceEndpoint.Behaviors.Add(new WebHttpBehavior());
serviceEndpoint.Name = "WebHttpBinding_IHelloWorldService";
serviceEndpoint.Contract.ConfigurationName = "HelloWorldService.IHelloWorldService";
serviceHost.Description.Behaviors.Add(new ServiceMetadataBehavior{HttpGetEnabled = true});
serviceHost.Open();
//Keeps it open
Console.WriteLine("The service is ready at {0}", baseUri);
Console.WriteLine("Press <Enter> to stop the service.");
Console.ReadLine();
serviceHost.Close();
}
服务合同:
[ServiceContract]
public interface IHelloWorldService
{
[OperationContract]
//[WebGet(UriTemplate = "/SayHello")]
[WebInvoke(UriTemplate = "/SayHello", Method = "GET")]
string SayHello();
[OperationContract]
[WebInvoke(UriTemplate = "/SayHelloTwo", Method = "POST")]
string SayHelloTwo(string name);
}
public class HelloWorldService : IHelloWorldService
{
public string SayHello()
{
return string.Format("Hello, Whatever");
}
public string SayHelloTwo(string name)
{
return string.Format("Hello, {0}", name);
}
}
以下是我如何调用方法:
WebChannelFactory<IHelloWorldService> factory = new WebChannelFactory<IHelloWorldService>(new Uri("http://localhost:8099/hello"));
var channel = factory.CreateChannel();
var sayHelloTwo = channel.SayHelloTwo("Claor");
Console.WriteLine(sayHelloTwo);
var sayHello = channel.SayHello();
Console.WriteLine(sayHello);
我的问题是当我调用channel.SayHello();它抛出这样的异常: mscorlib.dll中出现未处理的“System.ServiceModel.ProtocolException”类型异常
其他信息:远程服务器返回了意外响应:(405)方法不允许。
它发生在[WebInvoke(UriTemplate =“/ SayHello”,Method =“GET”)]和[WebGet(UriTemplate =“/ SayHello”)]上。 但是,如果我使用[WebInvoke(UriTemplate =“/ SayHello”,Method =“POST”)],它可以正常工作,如下面的方法所示。 问题是我真的需要这个方法成为GET方法,因为偶尔我需要通过浏览器调用它。
我开始相信WebChannelFactory简单不适用于GET方法。是吗?或者我做错了什么?
感谢您的时间。