2017-02-15 88 views
0

我试图消耗WCF PUT服务为:WCF PUT服务与多个参数

http://dummyurl/EmployeeUpdate?id=99999&item={"var1":true,"var2":1,"var3":1} 

下面是这已经是可用的服务(应该是工作的WCF服务)

[WebInvoke(Method = "PUT", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, UriTemplate = "EmployeeUpdate/{id}")] 
string UpdateEmp(string id, Employee emp); 


public string UpdateEmp(string id, Employee emp) 
    { 

     try 
     { 
    // process data 
     } 
     catch (Exception ex) 
     { 
    // handle exception 
     } 
     return IsSuccess; 
    }  

当我运行该服务时,获取错误消息为: 异常消息是'System.FormatException:输入字符串格式不正确。

我试图弄清楚,但无法修复。发现PUT方法只接受一个参数,服务也定义为只接收一个参数,但函数由两个参数定义。

1:我不理解如何通过我的数据作为一个参数,它是如何在功能解决

请提供此

回答

0

好一些指导,这个异常可以通过2的方式解决 - 你必须只使用一个参数,这是由于UriTemplate:

[WebInvoke(Method = "PUT", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, UriTemplate = "EmployeeUpdate/{id}")] 
string UpdateEmp(string id, Employee emp); 

必须使用这样的:

WebInvoke(Method = "PUT", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, UriTemplate = "EmployeeUpdate/{id}/{item}")] 
string UpdateEmp(string id, Employee item); 

我已经添加了/ {item},因为在uri中您有item而不是emp。

2 - 你也可以创建一个新的对象,并把你的参数,它

public class ParamClass 
{ 
    public string id; 
    public Employee emp; 
} 

如果你选择了这个解决方案,您必须将您的UpdateEmp参数更改相应的这种变化,如:

[WebInvoke(Method = "PUT", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, UriTemplate = "EmployeeUpdate/{emp}")] 
string UpdateEmp(ParamClass emp); 

也不要忘记更改“EmployeeUpdate”参数并在archi的其他部分中使用。

+0

谢谢。 。当我尝试了选项1以查看它是否有效时,我得到了服务器错误,并且不确定此更改是否还有其他服务无法正常工作,因此我已回滚此更改。选项2,真的,我不应该改变接口,因为它也被其他应用程序占用。 。强烈地感觉到界面是正确的,我没有以正确的方式(使用一个参数) –

+0

在Uri'id = 99999&item = {“var1”:true,“var2”:1,“var3”:1}很明显,需要的是两个参数:id和项目 – yyg

+0

我将检查并发布更新。 。谢谢 –