PHP 服务器在未将对象引用设置为对象实例时出现 C# Soap 客户端错误
Posted
技术标签:
【中文标题】PHP 服务器在未将对象引用设置为对象实例时出现 C# Soap 客户端错误【英文标题】:PHP server has C# Soap client error on Object reference not set to an instance of an object 【发布时间】:2012-02-09 02:34:04 【问题描述】:所以我有一个运行 nusoap 的 php Soap 服务,我正在编写自定义响应。
php 客户端运行良好,但 C# 客户端不断返回:
对象引用未设置为对象的实例。
关于如何解决此问题的任何想法?
我尝试使用测试数据初始化每个变量,但我一直收到同样的错误。
感谢您的意见。
我正在使用这种方法。
http://my.execpc.com/~gopalan/dotnet/webservices/webservice_csharp_client.html
这是我收到的错误 ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: 你调用的对象是空的 at gt.MainClass.Main (System.String[] args) [0x0005a] in //Projects/gt/Main.cs:27
第 27 行(gt 是 wsdl 对象)
gt.Transact(trans) 我正在传递一个事务对象,它应该返回一个事务响应,但它似乎没有解析响应。
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://CANNOT TELL YOUt", RequestNamespace="CANNOT TELL YOU", ResponseNamespace="CANNOT TELL YOU",
这是被调用的方法,这是部分类的一段代码。
ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped, Use=System.Web.Services.Description.SoapBindingUse.Literal)] [返回:System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] 公共 TransactResponse Transact([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] TransactRequest 请求) object[] results = this.Invoke("Transact", new object[] 要求); 返回((TransactResponse)(结果[0]));
【问题讨论】:
我们肯定需要一些代码。至少,抛出异常的那一行。 您是否向它添加“Web 引用”(如果使用 VS)?还是您正在创建自己的代理? my.execpc.com/~gopalan/dotnet/webservices/… 我不确定这两者有什么区别。 内容类型text/xml;响应消息的 charset=UTF-8 与绑定的内容类型不匹配(application/soap+xml;charset=utf-8)。如果使用自定义编码器,请确保正确实现 IsContentTypeSupported 方法。所以我想问题是如何更改 nusoap 中的绑定? 【参考方案1】:此错误是由于响应的 xml 格式。
因此,在这种情况下,我使用了由 C# ASP.NET 生成的 wsdl,并在 php5 apache 服务器上使用 nusoap 运行该 wsdl。 (这是对客户要求重新实现现有服务的要求,因此他们不必更改代码。)
例如,如果你有
<SomeResponse xmlns='some url'>
< object>
<element>data</element >
</object>
</SomeResponse >
.net 需要像这样格式化才能正确解析 xml。
<SomeResponse xmls='some url'>
<SomeResult xmlns:a='some url' xmlns:i=''>
<a:object>
<a:element></a:element>
</a:object>
</SomeResult>
</SomeResposne>
所以看起来响应数据需要用 Result 标签封装,该标签是函数名称与字符串“Result”的连接。所以在上面的例子中,被调用的函数是“Some”函数。
我不是 xml 或肥皂专家,我不确定这是为什么。我知道这与 xmlns:a='some url' 标签有关。
如果有人能解释得更好,那就太好了。
【讨论】:
以上是关于PHP 服务器在未将对象引用设置为对象实例时出现 C# Soap 客户端错误的主要内容,如果未能解决你的问题,请参考以下文章
求解决!在sql 2008 中用GridView控件配置数据源时出现此类弹框提示为“未将对象引用设置到对象的实例”
c# vs2010连接SQLServer2008时出现“未将对象引用设置到对象的实例。”