C# 400错误请求异常:具有小数据量的简单SOAP WCF服务

C# 400错误请求异常:具有小数据量的简单SOAP WCF服务,c#,wcf,C#,Wcf,我有一个简单的WCF服务,它使用SOAP。我有一个非常简单的操作“getmultiply”,数据量非常小。当客户端尝试调用该操作时,我会遇到以下异常。你知道可能出现什么问题吗 内部异常:{“远程服务器返回错误:(400)请求错误。”} 最后列出了完整的wsdl和模式 注意:我在服务和客户端配置中将配额值、maxBufferSize等设置为更高的值 服务中的跟踪 当我在服务中使用跟踪(基于)时,我得到了以下信息-似乎没有记录错误 <Type>3</Type> <Sub

我有一个简单的WCF服务,它使用SOAP。我有一个非常简单的操作“getmultiply”,数据量非常小。当客户端尝试调用该操作时,我会遇到以下异常。你知道可能出现什么问题吗

内部异常:{“远程服务器返回错误:(400)请求错误。”}

最后列出了完整的wsdl和模式

注意:我在服务和客户端配置中将配额值、maxBufferSize等设置为更高的值

服务中的跟踪

当我在服务中使用跟踪(基于)时,我得到了以下信息-似乎没有记录错误

<Type>3</Type>
<SubType Name="Information">0</SubType>
<Level>8</Level>
<TimeCreated SystemTime="2012-09-13T17:05:17.6059181Z" />
<Source Name="System.ServiceModel" />
<Description>AppDomain unloading.</Description>
客户端

    static void Main(string[] args)
    {
        CalculationServiceInterfaceClient proxy = new CalculationServiceInterfaceClient();
        multipliedResult result = proxy.getMultiplied(2);
    }
在自动生成的代码中,详细信息为:

    public NewClient.CalcReference.multipliedResult getMultiplied(int inputNumber) 
    {
        NewClient.CalcReference.getMultipliedRequest inValue = new NewClient.CalcReference.getMultipliedRequest();
        inValue.inputNumber = inputNumber;

        NewClient.CalcReference.getMultipliedResponse retVal = ((NewClient.CalcReference.CalculationServiceInterface)(this)).getMultiplied(inValue);
        return retVal.restaurants;
    }
WSDL

<definitions xmlns:import0="urn:lijo:demos:multiplyservice:messages:v1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:import1="urn:lijo:demos:multiplyservice:data:v1" xmlns:tns="urn:lijo:demos:multiplyservice:calculation:v1" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" name="CalculationService" targetNamespace="urn:lijo:demos:multiplyservice:calculation:v1" xmlns="http://schemas.xmlsoap.org/wsdl/">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" />
<types>
<xsd:schema>
  <xsd:import schemaLocation="C:\toolbox\LijosServiceApp\NewService\RestaurantMessages.xsd" namespace="urn:lijo:demos:multiplyservice:messages:v1" />
  <xsd:import schemaLocation="C:\toolbox\LijosServiceApp\NewService\RestaurantData.xsd" namespace="urn:lijo:demos:multiplyservice:data:v1" />
  </xsd:schema>
 </types>
 <message name="getMultipliedIn">
 <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" />
 <part name="parameters" element="import0:getMultiplied" />
 </message>
 <message name="getMultipliedOut">
 <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" />
 <part name="parameters" element="import0:getMultipliedResponse" />
 </message>
 <portType name="CalculationServiceInterface">
  <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" />
  <operation name="getMultiplied">
  <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" />
  <input message="tns:getMultipliedIn" />
  <output message="tns:getMultipliedOut" />
  </operation>
  </portType>
  <binding name="BasicHttpBinding_CalculationServiceInterface" type="tns:CalculationServiceInterface">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
  <operation name="getMultiplied">
  <soap:operation soapAction="urn:lijo:demos:multiplyservice:calculation:v1:getMultipliedIn" style="document" />
  <input>
    <soap:body use="literal" />
  </input>
  <output>
    <soap:body use="literal" />
  </output>
  </operation>
  </binding>
  <service name="CalculationServicePort">
  <port name="CalculationServicePort" binding="tns:BasicHttpBinding_CalculationServiceInterface">
  <soap:address location="http://localhost/CalculationService" />
  </port>
  </service>
  </definitions>

XSD

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema id="RestaurantData" targetNamespace="urn:lijo:demos:multiplyservice:data:v1"
elementFormDefault="qualified" xmlns="urn:lijo:demos:multiplyservice:data:v1"
xmlns:mstns="urn:lijo:demos:multiplyservice:data:v1" xmlns:xs="http://www.w3.org/2001/XMLSchema">

 <xs:complexType name="multipliedResult">
 <xs:sequence>
  <xs:element name="resultNumber" type="xs:int" />
 </xs:sequence>
 </xs:complexType>
 </xs:schema>

Cleint Config(自动生成)


我解决了这个问题:-)

我将公布答案,以利于其他人

  • 关键问题:我试图使用手动创建的wsdl。(我参考了服务内部可用的本地副本-我使用工具从wsdl生成服务代码)。服务没有提供它。我应该尝试通过浏览svc文件来查看wsdl

  • 使用WcfTestClient运行服务。出现一个错误,显示项目名称和我们使用的命名空间应该是相同的(否则它将在命名空间名称之前追加项目名称,这将成为不正确的命名空间)

    在“Visual Studio命令提示符”中键入“WcfTestClient”命令

  • 通过浏览服务中的svc文件,表明未启用元数据发布。在web.config中添加了元数据浏览的服务行为

  • 已使用服务的相对路径(而不是本地主机)

  • 服务跟踪也会有帮助(虽然在这里对我没有帮助)。使用了“C:\Program Files\Microsoft SDK\Windows\v7.0A\bin\SvcTraceViewer.exe”。随后是帖子,错误文件(initializeData=“Error.svclog”)存储在解决方案项目中。将其更改到其他位置无效

  • 提及


  • 您可以尝试对您的服务启用跟踪,并查看导致错误请求的原因。但是,如果您按照客户端代码通过SOAP访问服务,则不会出现异常。请确保您已在客户端更新了服务引用。@Rajesh tracing给出了“AppDomain卸载”只有。这可能是个问题吗?请查看更新的问题
    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema id="RestaurantData" targetNamespace="urn:lijo:demos:multiplyservice:data:v1"
    elementFormDefault="qualified" xmlns="urn:lijo:demos:multiplyservice:data:v1"
    xmlns:mstns="urn:lijo:demos:multiplyservice:data:v1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    
     <xs:complexType name="multipliedResult">
     <xs:sequence>
      <xs:element name="resultNumber" type="xs:int" />
     </xs:sequence>
     </xs:complexType>
     </xs:schema>
    
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_CalculationServiceInterface"
                    closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00"
                    sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false"
                    hostNameComparisonMode="StrongWildcard" maxBufferSize="65536"
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="524288" maxStringContentLength="524288" maxArrayLength="524288"
                        maxBytesPerRead="524288" maxNameTableCharCount="524288" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost/CalculationService" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_CalculationServiceInterface"
                contract="CalcReference.CalculationServiceInterface" name="CalculationServicePort" />
        </client>
    </system.serviceModel>