在.NET应用程序中添加PHP Web引用

时间:2012-01-03 18:34:01

标签: php .net vb.net web-services

我正在尝试从我的.Net Web应用程序添加并调用PHP Web服务。 我尝试在this教程中添加引用,但收到此错误。

The HTML document does not contain Web service discovery information.

我看到要调用的方法。我运行了svcutil,它返回了一些元数据和相同的错误。我也试过wsdl.exe并得到了同样的错误。我无法理解什么是最好的前进方式。 我已经阅读了很多SO帖子和文章,但现在感觉有点困惑。 任何帮助都会非常感谢

编辑: 这是从页面生成的xml。

<?xml version="1.0" encoding="utf-8"?>

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"

    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema"

    xmlns:tns="http://leopard-ext.its-dispatch.com/ws/request.php" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"

    xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://leopard-ext.its-dispatch.com/ws/request.php">

    <types>

        <s:schema elementFormDefault="qualified" targetNamespace="http://leopard-ext.its-dispatch.com/ws/request.php">

            <s:element name="fetchImport">

                <s:complexType>

                    <s:sequence>

                        <s:element minOccurs="1" maxOccurs="1" name="accessKey" type="s:string" />

                        <s:element minOccurs="1" maxOccurs="1" name="requestURL" type="s:string" />

                        <s:element minOccurs="1" maxOccurs="1" name="requestFunction" type="s:string" />

                        <s:element minOccurs="1" maxOccurs="1" name="requestType" type="s:string" />

                        <s:element minOccurs="1" maxOccurs="1" name="ID" type="s:string" />

                    </s:sequence>

                </s:complexType>

            </s:element>

            <s:element name="fetchImportResponse">

                <s:complexType>

                    <s:sequence>

                        <s:element minOccurs="1" maxOccurs="1" name="fetchImport" type="s:string" />

                    </s:sequence>

                </s:complexType>

            </s:element>

            <s:element name="getLoads">

                <s:complexType>

                    <s:sequence>

                        <s:element minOccurs="0" maxOccurs="1" name="accessKey" type="s:string" />

                    </s:sequence>

                </s:complexType>

            </s:element>

            <s:element name="getLoadsResponse">

                <s:complexType>

                    <s:sequence>

                        <s:element minOccurs="1" maxOccurs="1" name="getLoads" type="s:string" />

                    </s:sequence>

                </s:complexType>

            </s:element>

        </s:schema>

    </types>

    <message name="fetchImportSoapIn">

        <part name="parameters" element="tns:fetchImport" />

    </message>

    <message name="fetchImportSoapOut">

        <part name="parameters" element="tns:fetchImportResponse" />

    </message>

    <message name="getLoadsSoapIn">

        <part name="parameters" element="tns:getLoads" />

    </message>

    <message name="getLoadsSoapOut">

        <part name="parameters" element="tns:getLoadsResponse" />

    </message>

    <portType name="ITSDispatchServiceSoap">

        <operation name="fetchImport">

            <input message="tns:fetchImportSoapIn" />

            <output message="tns:fetchImportSoapOut" />

        </operation>

        <operation name="getLoads">

            <input message="tns:getLoadsSoapIn" />

            <output message="tns:getLoadsSoapOut" />

        </operation>

    </portType>

    <binding name="ITSDispatchServiceSoap" type="tns:ITSDispatchServiceSoap">

        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />

        <operation name="fetchImport">

            <soap:operation soapAction="http://leopard-ext.its-dispatch.com/ws/request.php/fetchImport" style="document" />

            <input>

                <soap:body use="literal" />

            </input>

            <output>

                <soap:body use="literal" />

            </output>

        </operation>

        <operation name="getLoads">

            <soap:operation soapAction="http://leopard-ext.its-dispatch.com/ws/request.php/getLoads" style="document" />

            <input>

                <soap:body use="literal" />

            </input>

            <output>

                <soap:body use="literal" />

            </output>

        </operation>

    </binding>

    <service name="ITSDispatchService">

        <port name="ITSDispatchServiceSoap" binding="tns:ITSDispatchServiceSoap">

            <soap:address location="http://leopard-ext.its-dispatch.com/ws/request.php" />

        </port>

    </service>

</definitions>

1 个答案:

答案 0 :(得分:2)

查看您发布的wsdl,在“its-dispatch.com”网站上,他们的标题设置错误(他们说它们是text / html而不是text / xml)。

您有几个选项,最简单的方法是将您粘贴在上面的文本作为文本文件保存到某个位置。然后使用Web Reference导入器导入它(您可以通过转到“Add Service Reference”,单击Advanced并选择“Add Web Reference”并使用file:// protocol指向您的文本文件来找到它。

Service Reference Settings

Add A Web Reference

例如,我尝试使用:“file:/// C:/Users/Kris/Desktop/test.wsdl”并获得了有效的网络参考。然后转到项目中的Web Reference并将“Web Reference URL”从“file:/// C:/Users/Kris/Desktop/test.wsdl”更改为“http://leopard-ext.its-dispatch.com/ws/request.php?wsdl”,一切都应该适用于你。

enter image description here

我使用了Visual Studio为Web服务提供的默认名称,我建议您更改它们以符合您的命名约定。

您可以在此处找到我创建的示例项目:http://wikisend.com/download/299780/WindowsFormsApplication1.zip