2

我正在使用 Monotouch 开发 iPhone 应用程序并使用 ASMX 网络服务。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 不能正确识别我的网络服务?

4

1 回答 1

0

IList<string>尚不完全支持诸如此类的集合类型。

这里有两个主要问题:

  • 从 WSDL 创建客户端代理。

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

  • 消息序列化

    这是更严重的问题,因为它会阻止您与远程服务交谈。

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

另一个问题更美观:两者之间没有区别

    [OperationContract]
    IList<int> GetSimpleList();

    [OperationContract]
    int[] GetArray();

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

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

于 2012-10-01T16:30:53.837 回答