我遇到了这个错误:
Operation 'Login' in contract 'Medicall' has a query variable named 'objLogin' of type 'Medicall_WCF.Medicall+clsLogin', but type 'Medicall_WCF.Medicall+clsLogin' is not convertible by 'QueryStringConverter'. Variables for UriTemplate query values must have types that can be converted by 'QueryStringConverter'.
我正在尝试将参数传递给我的WCF服务,但该服务甚至没有显示。
#region Methods
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
public Int32 Login(clsLogin objLogin)
{
try
{
// TODO: Database query.
if (objLogin.username == "" & objLogin.password == "")
return 1;
else
return 0;
}
catch (Exception e)
{
// TODO: Handle exception error codes.
return -1;
}
}
#endregion
#region Classes
[DataContract(), KnownType(typeof(clsLogin))]
public class clsLogin
{
public string username;
public string password;
}
#endregion
我正在使用它:
$.ajax({
url: "PATH_TO_SERVICE",
dataType: "jsonp",
type: 'post',
data: { 'objLogin': null },
crossDomain: true,
success: function (data) {
// TODO: Say hi to the user.
// TODO: Make the menu visible.
// TODO: Go to the home page.
alert(JSON.stringify(data));
},
failure: function (data) { app.showNotification('Lo sentimos, ha ocurrido un error.'); }
});
要调用该服务,它之前使用的服务收到了1个字符串参数。 我怎么才能收到这个对象?
答案 0 :(得分:3)
问题是,您的Login
功能标有属性WebGet [WebGet(ResponseFormat = WebMessageFormat.Json)]
。您应该将方法声明为WebInvoke:
[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Json)]
public Int32 Login(clsLogin objLogin)
WebGet默认使用QueryStringConverter类,无法转换您的复杂类型。如果您真的需要使用WebGet,有一种方法可以让它为您工作,请查看讨论here,以获得有关如何实现这一目标的详细解释。
请看一下这篇文章,了解WebGet vs WebInvoke的解释。基础是WebGet应该与HTTP GET一起使用,WebInvoke应该与其他动词一起使用,如POST。