Monotouch:WSDL和WebService参数

时间:2012-09-04 12:11:59

标签: web-services xamarin.ios wsdl monodevelop

我正在使用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无法正确识别我的网络服务?

1 个答案:

答案 0 :(得分:0)

尚未完全支持IList<string>等集合类型。

这里有两个主要问题:

  • 从WSDL创建客户端代理。

    您可以在Windows上使用SLSvcUtil.exe解决此问题。

  • 消息序列化

    这是一个更严重的问题,因为它会阻止您与远程服务通话。

我上周已经实现了一些缺失的部分,但还没有完成。字典类型仍然缺失,我还需要对数组和更复杂的类型(如数组数组)进行更多测试。

另一个问题是更加美观:

之间没有区别
    [OperationContract]
    IList<int> GetSimpleList();

    [OperationContract]
    int[] GetArray();
WSDL中的

(都是ArrayOfint)。 Visual Studio允许您配置集合类型(右键单击服务引用,选择“配置服务引用”,该对话框中间有“集合类型”),应在生成的客户端代理中使用。

MonoDevelop尚不支持并且使用数组(或更好:它应该使用数组;目前,它只是崩溃。我会看看它。)