Это может быть связано с тем, что привязка конечной точки службы не использует протокол HTTP. - PullRequest
80 голосов
/ 03 мая 2011

У меня нормально работает служба WCF на моей локальной машине.Я поместил его на серверы и получил следующую ошибку:

Произошла ошибка при получении ответа HTTP на http://xx.xx.x.xx:8200/Services/WCFClient.svc. Это может быть связано с тем, что привязка конечной точки службы не используетсяпротокол HTTP.Это также может быть связано с тем, что сервер прерывает контекст HTTP-запроса (возможно, из-за закрытия службы).Более подробную информацию смотрите в журналах сервера.]

Я зашел на службу в URL-адресе, и она работает правильно.Все, что я делаю для функции - это возвращаю строку имени изображения, поэтому передаваемых данных не так уж много.Я проследил журнал, и он дает мне ту же информацию.Вот моя конфигурация клиента:

<binding name="basicHttpBinding_IWCFClient" closeTimeout="00:01:00"
         openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
         bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
         maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
         messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
         allowCookies="false">
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
                  maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
                  maxNameTableCharCount="2147483647" />
    <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
    </security>
</binding>
<endpoint name="basicHttpBinding_IWCFClient" 
    address="http://localhost:4295/Services/WCFClient.svc"
    binding="basicHttpBinding" 
    bindingConfiguration="basicHttpBinding_IWCFClient" 
    behaviorConfiguration="WCFGraphicManagementTool.Services.ClientBehavior"
    contract="WCFClient.IWCFClient" />

Вот моя конфигурация сервера:

<service behaviorConfiguration="WCFGraphicManagementTool.Services.WCFClientBehavior"
    name="WCFGraphicManagementTool.Services.WCFClient">
   <endpoint name="basicHttpBinding_IWCFClient"
       address="" 
       binding="basicHttpBinding" 
       contract="WCFGraphicManagementTool.Contracts.IWCFClient" />
   <endpoint 
       address="mex" 
       binding="mexHttpBinding" 
       contract="IMetadataExchange" />
</service>
<behavior name="WCFGraphicManagementTool.Services.WCFClientBehavior">
   <dataContractSerializer maxItemsInObjectGraph="2147483647" />
   <serviceThrottling maxConcurrentCalls="120" maxConcurrentSessions="120"
                      maxConcurrentInstances="120" />
   <serviceMetadata httpGetEnabled="true" />
   <serviceDebug includeExceptionDetailInFaults="true" />
</behavior>

Это будет настройка на сервере, так как он работает на моей локальной машине?

Ответы [ 21 ]

0 голосов
/ 09 мая 2013

Эта ошибка может быть из-за несоответствия контракта. Рассмотрим трехслойное приложение ниже ...

UI Layer
|
Уровень процесса
|
Уровень доступа к данным
-> Контракт между процессом и слоем пользовательского интерфейса имеет то же самое перечисление с отсутствующим (Onhold = 3). Enum: Start = 1, Stop = 2. -> Контракт между доступом к данным и уровнем процесса имеет перечисление Enum: Start = 1, Stop = 2, Onhold = 3.

В этом случае мы получим ту же ошибку в ответе уровня процесса.

Та же ошибка возникает при другом несоответствии контракта в многослойном приложении.

...