2011-02-24 53 views
0

我想配置一个RESTful的WCF服务,将接受以下网址:WCF休息定制URL

http://localhost/Service.svc/ProcessRequest;ID=1234

我创建了服务合同如下:

[ServiceContract] 
    public interface IService 
    { 

     [OperationContract] 
     [WebInvoke(Method = "POST", UriTemplate = "/ProcessRequest")] 
     XmlElement ProcessRequest(Stream postbody); 

但是,当我尝试从客户端调用此函数时,这会返回404错误,可能是由于url的格式。有没有办法处理; ID = 1234作为方法的一部分。我不一定需要捕获ID的价值,但由于各种原因,客户端将以该格式发送URL,我必须能够处理它。

+0

我意识到这并没有多大帮助,但只是你知道,客户端不应该定义URL。 URL空间是服务器的责任,客户应该没有发言权。如果客户正确使用超媒体,这对您的客户开发人员来说显而易见。 – 2011-02-25 00:51:56

+0

我完全同意。但是我正在做的是创建一个我正在使用的现有服务的模拟版本。 – 2011-02-25 08:56:26

回答

1

首先,您需要从您的UriTemplate中删除/前缀。我不知道,如果你能逃脱分号,但你应该试试这个:

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", UriTemplate = "ProcessRequest;ID={id}")] 
    XmlElement ProcessRequest(string id, Stream postbody); 
} 

做不到这一点,替代;?,并尝试加载它作为http://localhost/Service.svc/ProcessRequest;ID=1234,看是否这就是问题所在。

+0

最后一个示例是错误的?它不应该是:http://localhost/Service.svc/ProcessRequest?ID = 1234? – 2011-02-24 13:59:29

+0

我不能使用?我必须使用; – 2011-02-24 14:04:56

+0

嗯,如果我在方法中添加额外的参数,我会得到以下异常: ExceptionDetail,可能由IncludeExceptionDetailInFaults = true创建,其值为:System.InvalidOperationException:在调用WSDL导出扩展时抛出异常:System.ServiceModel.Description.DataContractSerializerOperationBehavior合同:http://tempuri.org/:ICarService ----> System.InvalidOperationException:对于请求在操作中ProcessRequest是一个流,该操作必须有一个参数,其类型为Stream。 – 2011-02-24 14:26:02