是否可以使用自托管服务在 wcf 端点 uri 上调用服务操作?
当客户端进入服务的端点 uri 时,我想调用一些默认的服务操作。
在以下示例中,这些 uri 正确调用了声明的操作(SayHello、SayHi):
- http://localhost:4711/clerk/hello
- http://localhost:4711/clerk/hi
但是 uri
- http://localhost:4711/clerk
不调用声明的 SayWelcome 操作。相反,它会导致众所周知的“元数据发布已禁用”页面。启用 mex 没有帮助,在这种情况下,mex 页面显示在端点 uri 上。
private void StartSampleServiceHost()
{
ServiceHost serviceHost = new ServiceHost(typeof(Clerk), new Uri( "http://localhost:4711/clerk/"));
ServiceEndpoint endpoint = serviceHost.AddServiceEndpoint(typeof(IClerk), new WebHttpBinding(), "");
endpoint.Behaviors.Add(new WebHttpBehavior());
serviceHost.Open();
}
[ServiceContract]
public interface IClerk
{
[OperationContract, WebGet(UriTemplate = "")]
Stream SayWelcome();
[OperationContract, WebGet(UriTemplate = "/hello/")]
Stream SayHello();
[OperationContract, WebGet(UriTemplate = "/hi/")]
Stream SayHi();
}
public class Clerk : IClerk
{
public Stream SayWelcome() { return Say("welcome"); }
public Stream SayHello() { return Say("hello"); }
public Stream SayHi() { return Say("hi"); }
private Stream Say(string what)
{
string page = @"<html><body>" + what + "</body></html>";
return new MemoryStream(Encoding.UTF8.GetBytes(page));
}
}
有什么方法可以禁用 mex 处理并启用声明的操作?
提前致谢, 迪特