我遇到的问题是我试图将非原始(和用户定义的)数据类型传递给WebMethod。有没有办法做到这一点?以下是我的代码示例:
[WebMethod]
public bool GetTableRecordCnt(int i, String str, DateTime? lastUpdatedDate, UserDefinedType udt, out FDT_SCHEDULER_STATUS[] schedulerTable)
{
//code
}
当我尝试从客户端应用程序调用此函数时,出现以下错误:
“无法从传输连接中读取数据。”
如果我用基本数据类型(例如int)替换UserDefineType参数,则客户端可以从WebMethod获取响应。
先谢谢你的帮助。
编辑:
从客户端应用程序调用代码:
UserDefinedType udt = new UserDefinedType();
UserDefinedType1[] tableRecords = ThisApplication.FillArray();
bool result = WebServiceReferenceName.GetTableRecordCnt(1, "tableName", "10/10/2010 12:00:00", udt, out tableRecords);
这是传递给Web方法的参数的粗略过度简化,但每个参数中的数据都是传递的。
答案 0 :(得分:1)
是的,你可以。您需要创建一个与UserDefinedType的公共属性匹配的对象。如果您正在使用.Net webservices并将该方法标记为[ScriptMethod()],那么这将非常简单,然后它将响应JSON。
以下是一个例子:
public class UserDefinedType
{
public int Property1 { get; set; }
public string Property2 { get; set; }
}
您可以使用以下javascript作为参数传递:
var param = "{ Property1 : '"+prop1Val+"', Property2 : '"+prop2Val+"'}";
注意,您必须声明JSON对象作为字符串传递,否则如果您使用的是jQuery.ajax(...),它会将您的param对象序列化为编码的param字符串,而不是将其作为本机JSON传递字符串。
还有一些不错的库可以处理JSON数据对象,例如jquery-json 2.2。使用它,您可以简单地将参数传递为$ .toJSON(param)。
最后,这是使用jquery将请求发送到ASP .Net Web服务的示例:
$.ajax({
type: "POST",
url: "/Services/YourService.asmx/YourMethod",
cache: false,
data: $.toJSON(param), // Convert JSON object to String for Post
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
HandleResponse(response.d)
},
error: function (e) {
alert('error during web service call');
}
});
答案 1 :(得分:1)
现在我对自己的问题有了答案。我已将Web服务方法签名更改为:
[WebMethod]
public bool GetTableRecordCnt(int i, String str, DateTime? lastUpdatedDate, object udt, out FDT_SCHEDULER_STATUS[] schedulerTable)
{
//code
}
请注意,我将UserDefinedType类型更改为object。现在,我可以让我的客户端与我的Web服务进行通信。有没有人有任何理由不这样做?
答案 2 :(得分:1)
这解释了您的问题:Passing a custom object to the web service
你的UserDefinedType可能包含像List,Dictionary这样的“花哨”东西或者无法序列化的东西,因此你会收到错误。
我很惊讶您可以像这样传递UserDefinedType,确保获得所需的所有属性,我怀疑你会得到很多非原始部分的空值。
答案 3 :(得分:0)
是的,只要您的类型为serializable,就可以使用此功能。
答案 4 :(得分:0)
好的,所以找出问题所在最终给了我一些缓解=)
显然,将UserDefinedType传递给Web方法时,可以命名变量的字符数有限制。在我的代码中使用我为这个新函数添加的每个部分进行测试之后。我发现缩短了以下变量名称:
SchedulerRecordCount
为:
SchedRecCnt
现在允许在我的Windows移动应用程序和c#Web服务之间传递数据。 GO Figure!
现在,有没有人知道对于可以用于在UserDefinedType中命名变量的字符数是否存在特定的数字限制,该变量将被传递给Web方法,或者这可能是我的一个环境问题?