1

这是我第一次尝试通过托管在 Windows 服务中的 WCF 提供服务。我注意到,如果我在 UriTemplate 中做错了什么,它会完全破坏一切,我不知道为什么。

例子:

在第一个代码示例中,一切正常。该服务等待我定义的基地址并返回我期望的信息。

[ServiceContract]
public interface IService1
{
    [OperationContract]
    [WebInvoke(Method = "GET", UriTemplate = "/GetDetail?id={id}", BodyStyle = WebMessageBodyStyle.WrappedResponse, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    MyDetail GetDetail(int id);
}

在这个示例中,我将所有内容更改UriTemplate = "/GetDetail?id={id}"UriTemplate = "/GetDetail/{id}"中断。该服务甚至不等待我配置的基地址。

[ServiceContract]
public interface IService1
{
    [OperationContract]
    [WebInvoke(Method = "GET", UriTemplate = "/GetDetail/{id}", BodyStyle = WebMessageBodyStyle.WrappedResponse, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    MyDetail GetDetail(int id);
}

我不明白这种变化如何导致一切都失败?它不应该只是无法处理 GetDetail 调用而不破坏整个系统吗?

还要对此进行扩展,如何将日志记录添加到我的服务中。

4

1 回答 1

0

使用WebGetorWebInvoke时,路径中的 UriTemplate 变量必须是字符串。您只能将 UriTemplate 变量绑定到 int、long 等,当它们位于 UriTemplate 的查询部分中时,如您的第一个示例所示。

因此,解决问题的一个非常基本的方法可能是

[ServiceContract]
public interface IService1
{
    [OperationContract]
    [WebGet(UriTemplate = "/GetDetail/{id}", BodyStyle = WebMessageBodyStyle.WrappedResponse, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    MyDetail  GetDetail(string id);
}
于 2013-07-03T11:47:42.533 回答