WCF, удаленный сервер возвратил ошибку: (400) неверный запрос - PullRequest
5 голосов
/ 16 марта 2010

Я получаю это исключение при попытке доступа к веб-службе wcf.

[WebException: The remote server returned an error: (400) Bad Request.]
  System.Net.HttpWebRequest.GetResponse() +5314029
  System.ServiceModel.Channels.HttpChannelRequest.WaitForReply(TimeSpan timeout) +54

Информация о привязке сервера

<system.serviceModel>
   <bindings>
      <basicHttpBinding>
         <binding name="wcfSmartConnect" closeTimeout="10:01:00" 
                  maxBufferSize="104857600" maxBufferPoolSize="104857600" 
                  maxReceivedMessageSize="104857600" openTimeout="10:01:00"
                  receiveTimeout="10:10:00" sendTimeout="10:01:00"
                  messageEncoding="Mtom" transferMode="StreamedRequest">
            <readerQuotas maxDepth="104857600" maxStringContentLength="104857600"
                          maxArrayLength="104857600" maxBytesPerRead="104857600" 
                          maxNameTableCharCount="104857600" />
         </binding>
      </basicHttpBinding>
   </bindings>
   <services>
      <service name="WcfSmartConnect.Service1"
               behaviorConfiguration="WcfSmartConnect.Service1Behavior">
         <endpoint 
               address="" 
               binding="basicHttpBinding" 
               bindingConfiguration="wcfSmartConnect"
               contract="WcfSmartConnect.IService1">
            <identity>
               <dns value="localhost" />
            </identity>
         </endpoint>
         <endpoint 
               address="mex" 
               binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
  </services>
  <behaviors>
      <serviceBehaviors>
           <behavior name="WcfSmartConnect.Service1Behavior">
            <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
   </behaviors>
</system.serviceModel>

Информация о привязке клиента

<system.serviceModel>
   <bindings>
      <basicHttpBinding>
         <binding name="wcfSmartConnect" closeTimeout="10:01:00" 
                  maxBufferSize="104857600" maxBufferPoolSize="104857600" 
                  maxReceivedMessageSize="104857600" openTimeout="10:01:00" 
                  receiveTimeout="10:10:00" sendTimeout="10:01:00" 
                  messageEncoding="Mtom" transferMode="StreamedRequest">
             <readerQuotas maxDepth="104857600" maxStringContentLength="104857600"
                           maxArrayLength="104857600" maxBytesPerRead="104857600" 
                           maxNameTableCharCount="104857600" />
         </binding>
      </basicHttpBinding>
      <wsHttpBinding>
          <binding name="WSHttpBinding_IService11" closeTimeout="01:00:00"
                   openTimeout="01:00:00" receiveTimeout="01:00:00" 
                   sendTimeout="01:00:00" bypassProxyOnLocal="false" 
                   transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                   maxBufferPoolSize="1048576000" maxReceivedMessageSize="1048576000"
                   messageEncoding="Text" textEncoding="utf-8" 
                   useDefaultWebProxy="true" allowCookies="false">
               <readerQuotas maxDepth="104857600" maxStringContentLength="104857600" 
                             maxArrayLength="104857600" maxBytesPerRead="1048576000" 
                             maxNameTableCharCount="104857600" />
               <reliableSession ordered="true" inactivityTimeout="00:10:00"
                                enabled="false" />
               <security mode="TransportWithMessageCredential">
                   <transport clientCredentialType="Windows" 
                              proxyCredentialType="None" realm="" />
                   <message clientCredentialType="Windows" 
                            negotiateServiceCredential="true" algorithmSuite="Default" 
                            establishSecurityContext="true" />
               </security>
            </binding>
        </wsHttpBinding>
   </bindings>
   <client>
       <endpoint name="WSHttpBinding_IService11"
           address="http://abc.com/API/serv.svc"
           binding="wsHttpBinding" 
           bindingConfiguration="WSHttpBinding_IService11"
           contract="SmartConnectRepublic.IService1" >
           <identity>
               <dns value="localhost" />
           </identity>
       </endpoint>
       <endpoint name="BasicHttpBinding_IService1" 
           address="http://localhost:4649/Service1.svc" 
           binding="basicHttpBinding"
           bindingConfiguration="wcfSmartConnect" 
           contract="SmartConnect.IService1" />
   </client>
</system.serviceModel>

1 Ответ

2 голосов
/ 16 марта 2010

Можете ли вы рассказать нам немного о вашей настройке?

  • Какую привязку вы используете?
  • это единственный метод обслуживания? Если нет: другие работают?
  • покажи нам свои конфиги на клиенте и сервере! (все внутри <system.serviceModel> представляет интерес)

Может показаться, что время ожидания клиента истекло - это может быть из-за того, что сервер слишком долго реагирует (если вы загружаете много данных); в этом случае вам нужно увеличить время ожидания на сервере и клиенте

Или вы, возможно, отправляете слишком большой пакет данных по сети - в этом случае вам также может потребоваться увеличить настройки для maxReceivedMessageSize и др.

@ Пину: ты пытаешься загрузить 5 МБ? У вас есть TransferMode = StreamRequest, что означает, что ваш запрос от клиента к серверу будет транслироваться.

Если вы передаете 5 МБ, это хорошая идея для потоковой передачи - каким способом вы передаете эти байты ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...