2012-09-13 69 views
1

我有一個簡單的WCF服務起訴SOAP。我有一個非常簡單的操作「GetMultiplied」與非常少量的數據。客戶嘗試調用操作時遇到以下異常。任何想法都可能是什麼問題?400錯誤的請求異常:簡單的SOAP WCF服務與小數據

Inner Exception: {"The remote server returned an error: (400) Bad Request."}

完成wsdl和架構在最後列出。

注意:我已經在服務和客戶端配置中將配額值maxBufferSize等設置爲更高的值。

在服務

跟蹤,當我用在服務(基於How to turn on WCF tracing?)跟蹤,我正在以下 - 好像是沒有記錄的錯誤。

<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> 

服務實現

public class CalculationService : ICalculationService 
{ 

    public virtual GetMultipliedResponse GetMultiplied(GetMultipliedRequest request) 
    { 
     MultipliedResult result = new MultipliedResult(); 
     result.ResultNumber= ((request.InputNumber)*2); 

     GetMultipliedResponse response = new GetMultipliedResponse(result); 
     return response; 
    } 
} 

客戶

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配置(自動生成的)

<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> 
+0

您可以嘗試啓用跟蹤你的服務,看看是什麼原因導致了錯誤的請求。但是,如果您正在通過SOAP訪問您的服務,那麼您的客戶端代碼不應該出現異常。確保您已在客戶端更新了您的服務參考。 – Rajesh

+0

@Rajesh Tracing只給了「AppDomain卸載」。這可能是一個問題嗎?請參閱更新後的問題 – Lijo

回答

2

我解決了這個問題:-)

我會發布答案爲他人的利益。

  1. 關鍵問題:我試圖使用手動創建的wsdl。 (我在服務內部提供了本地副本 - 我正在使用工具從wsdl生成服務代碼)。該服務不提供它。我應該試圖從瀏覽svc文件中查看wsdl

  2. 使用WcfTestClient運行服務。給出了一個錯誤,顯示項目名稱和我們使用的命名空間應該是相同的。 (否則它會在命名空間名稱前附加項目名稱,並且這將變爲不正確的名稱空間)

    在「Visual Studio命令提示符」中鍵入「WcfTestClient」命令。http://blogs.msdn.com/b/wcftoolsteamblog/archive/2010/01/04/tips-for-launching-wcf-test-client.aspx

  3. 通過瀏覽的服務SVC文件,它表明,元數據發佈未啓用。在web.config中添加了用於元數據瀏覽的服務行爲。爲服務(而不是本地主機)

  4. 二手相對路徑error "No protocol binding matches the given address ..."

  5. 服務跟蹤也可以幫助(雖然沒有幫助我在這裏)。使用「C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ SvcTraceViewer.exe」。緊跟帖子,錯誤文件(initializeData =「Error.svclog」)存儲在解決方案項目中。將其更改爲其他位置不起作用。 How to turn on WCF tracing?

  6. 參考One WCF service – two clients; One client does not work

+0

爲了其他人(和您自己)的緣故,您也可以將其標記爲已接受的答案。 –

相關問題