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时出现“未将对象引用设置到对象的实例。”

未将对象引用设置到对象的实例

NODEJS / PHP WSDL SOAP:未将对象引用设置为对象的实例

C#连接数据库出现未将对象引用实例

未将对象引用设置到对象的实例都可能由哪些原因引起的