VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 739|回复: 6

help!各位老大帮忙看一下,困扰了很久的问题(调用webservice)

[复制链接]

1

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-29 15:40:01 | 显示全部楼层 |阅读模式
错误提示:
未处理的“System.InvalidOperationException”类型的异常出现在 system.web.services.dll 中。

其他信息: 无法反射方法 PresenceSupplierService.getMyWatchers。
==============================
使用呈现的wsdl生成了PresenceSupplierService.dll,并连同System.Web.Services.dll一起添加到项目的引用中,相关代码:
getMyWatchers y_object= new getMyWatchers();
y_object.presentity="sip:kk@192.168.2.251:50611";
PresenceSupplierService ps=new PresenceSupplierService();//提示出错的是这步
string[] result=ps.getMyWatchers (y_object);
==============================
当我用类似方法调用PresenceNotificationService时是正常的(该service是sag上行到sp侧的,而supplierservice是sp侧下行的sag的);小弟初涉.net,求高人指点,谢
回复

使用道具 举报

0

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-6-16 20:15:01 | 显示全部楼层
重新生成代理类试试,不知道服务器端类的定义最好你公开部分代码(或接口),有可能是服务器端代码的问题。
回复

使用道具 举报

1

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-6-20 14:00:01 | 显示全部楼层
谢谢zcbb的回复,生成的代理类肯定有问题,我是根据parlay标准的wsdl文件生成的代理类,代理类的源码和测试程序的项目源码都可以提供,下面是代理类中getMywatchers方法部分的源码(有点乱,用ultraedit打开好了):
        [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)]
        [return: System.Xml.Serialization.XmlArrayAttribute("getMyWatchersResponse", Namespace="http://www.csapi.org/schema/parlayx/presence/supplier/v3_1/local")]
        [return: System.Xml.Serialization.XmlArrayItemAttribute("result", Namespace="http://www.csapi.org/schema/parlayx/presence/supplier/v3_1/local", DataType="anyURI", IsNullable=false)]
        public string[] getMyWatchers([System.Xml.Serialization.XmlElementAttribute("getMyWatchers", Namespace="http://www.csapi.org/schema/parlayx/presence/supplier/v3_1/local")] getMyWatchers getMyWatchers1) {
            object[] results = this.Invoke("getMyWatchers", new object[] {
                        getMyWatchers1});
            return ((string[])(results[0]));
        }
        
        /// <remarks/>
        public System.IAsyncResult BegingetMyWatchers(getMyWatchers getMyWatchers1, System.AsyncCallback callback, object asyncState) {
            return this.BeginInvoke("getMyWatchers", new object[] {
                        getMyWatchers1}, callback, asyncState);
        }
        
        /// <remarks/>
        public string[] EndgetMyWatchers(System.IAsyncResult asyncResult) {
            object[] results = this.EndInvoke(asyncResult);
            return ((string[])(results[0]));
        }



    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.csapi.org/schema/parlayx/presence/supplier/v3_1/local")]
    public class getMyWatchers {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(DataType="anyURI")]
        public string presentity;
    }
回复

使用道具 举报

1

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-6-21 01:45:01 | 显示全部楼层
parlayx标准中对该方法的描述如下:
8.3.4.1        Input message: getMyWatchersRequest
Part name               presentity       
Part type       xsd:anyURI  

8.3.4.2        Output message: getMyWatchersResponse
Part name                Result
Part type         xsd:anyURI [0..unbounded]
回复

使用道具 举报

1

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-6-22 08:00:01 | 显示全部楼层
该标准的另外一个接口的wsdl用同样方法部署webservice客户端则没有问题,

下面是这个成功的webservice的信息
      
============代理类中的相关代码:
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)]
[return: System.Xml.Serialization.XmlElementAttribute("statusEndResponse", Namespace="http://www.csapi.org/schema/parlayx/presence/notification/v3_1/local")]
public statusEndResponse statusEnd([System.Xml.Serialization.XmlElementAttribute("statusEnd", Namespace="http://www.csapi.org/schema/parlayx/presence/notification/v3_1/local")] statusEnd statusEnd1) {
     object[] results = this.Invoke("statusEnd", new object[] {
                 statusEnd1});
     return ((statusEndResponse)(results[0]));
}

/// <remarks/>
public System.IAsyncResult BeginstatusEnd(statusEnd statusEnd1, System.AsyncCallback callback, object asyncState) {
     return this.BeginInvoke("statusEnd", new object[] {
                 statusEnd1}, callback, asyncState);
}

/// <remarks/>
public statusEndResponse EndstatusEnd(System.IAsyncResult asyncResult) {
     object[] results = this.EndInvoke(asyncResult);
     return ((statusEndResponse)(results[0]));
}

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.csapi.org/schema/parlayx/presence/notification/v3_1/local")]
    public class statusEndResponse {
    }
   
   
==============客户端中的代码
statusEnd x_object =new statusEnd();
x_object.correlator=textBox1.Text ;
PresenceNotificationService pn=new PresenceNotificationService();
pn.statusEnd (x_object);
   
   
    =========parlayx标准中对该方法的描述
8.2.2.1        Input message: statusEndRequest
Part name          Correlator
Part type          xsd:string

8.2.2.2        Output message: statusEndResponse
Part name        None
Part type       
                       
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-8-23 00:30:02 | 显示全部楼层
关注 Parlay X
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-8-25 00:30:01 | 显示全部楼层
从新生成代理类。 服务器端发布的WSDL变了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表