我正在使用Monotouch开发iPhone应用程序并使用ASMX Web服务。 WebReference已正确添加(感谢.wsdl文件),我开始使用我的WS引用:
public static string CallWs(string[] arrData_,
List<string[]> lstObject_)
{
WebService webService = new Service ();
webService.CallMethod(arrData_, lstObject_);
}
我的网络服务有正确的方法public void CallMethod(string[] arrData_, List<string[]> lstObject_)
,.wsdl文件正确描述(ArrayOfArrayOfString
),但MonoTouch将其视为public void CallMethod(string[] arrData_, string lstObject_)
。
所以,我尝试将我的方法修改为string[][]
:同一问题
我尝试使用NewtonSoft.Json DLL来解析我的数据,但这需要隐式地使用System.Drawing(Monotouch不存在,CoreGraphics会替换它),因此可以找到并解决它。
编辑:
当前解决方案是编辑参考文件并更改参数类型。
还有其他解决方案吗?为什么MonoDevelop无法正确识别我的网络服务?
答案 0 :(得分:0)
尚未完全支持IList<string>
等集合类型。
这里有两个主要问题:
从WSDL创建客户端代理。
您可以在Windows上使用SLSvcUtil.exe
解决此问题。
消息序列化
这是一个更严重的问题,因为它会阻止您与远程服务通话。
我上周已经实现了一些缺失的部分,但还没有完成。字典类型仍然缺失,我还需要对数组和更复杂的类型(如数组数组)进行更多测试。
另一个问题是更加美观:
之间没有区别 [OperationContract]
IList<int> GetSimpleList();
和
[OperationContract]
int[] GetArray();
WSDL中的(都是ArrayOfint
)。 Visual Studio允许您配置集合类型(右键单击服务引用,选择“配置服务引用”,该对话框中间有“集合类型”),应在生成的客户端代理中使用。
MonoDevelop尚不支持并且使用数组(或更好:它应该使用数组;目前,它只是崩溃。我会看看它。)