Ошибка WCF - соединение закрыто удаленным хостом - PullRequest
0 голосов
/ 03 мая 2011

У меня очень странная ошибка ...

Я занимаюсь разработкой службы WCF, которую я перенял у кого-то другого. Существует класс с именем User, определенный следующим образом:

namespace WebApi.DataContracts
{
    [DataContract]
    public class User
    {
        [DataMember]
        public int Id
        {
            get;
            set;
        }
        [DataMember]
        public string Username
        {
            set;
            get;
        }
    ...
        [DataMember]
        public DateTime Birth
        {
            get;
            set;
        }
        [DataMember]
        public bool Newsletter
        {
            get;
            set;
        }

и т.д ...

Я создал метод API, который возвращает этот объект в виде данных

namespace WebApi
{
    public class SoapApi : IApi
    {
        public DataContracts.User UserRegister()
        {
            DataContracts.User u = new DataContracts.User();
            return u;
    }
}

Когда я пытаюсь вызвать это от клиента, я получаю эту ошибку:

[SocketException (0x2746): An existing connection was forcibly closed by the remote host]
   System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) +6132200
   System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) +134

[IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.]
   System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) +300
   System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size) +26
   System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead) +265

[WebException: The underlying connection was closed: An unexpected error occurred on a receive.]
   System.Net.HttpWebRequest.GetResponse() +6038435
   ClassLib.HandlerFactory.AjaxProxy.ProcessRequest(HttpContext context) in ClassLib\HandlerFactory.cs:75
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +100
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

Мне кажется, что эта строка

System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) +6132200

указывает на то, что очень много байтов пытаются отправить - почему это так?

ОБНОВЛЕНИЕ: привязка в моем КЛИЕНТЕ web.config выглядит следующим образом:

<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_Api" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
      allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
      maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
      useDefaultWebProxy="true">
    <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>
    <binding name="ApiBinding" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
      allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
      maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
      useDefaultWebProxy="true">
    <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>
  </basicHttpBinding>
</bindings>

Привязки SERVER web.config:

<bindings>
  <basicHttpBinding>
    <binding name="ApiBinding" />
  </basicHttpBinding>
  <webHttpBinding>
    <binding name="ApiBinding" />
  </webHttpBinding>
</bindings>

/ Карстен

1 Ответ

0 голосов
/ 03 мая 2011

По предоставленной вами информации, которая представляется только серверной, невозможно сказать, в чем проблема.

Итак:

  • Обновите информацию с помощью детализации на стороне клиента

Теперь ошибка говорит мне, что происходит несоответствие привязки или произошла ошибка безопасности- хотя безопасность установлена ​​на Нет.Таким образом, моя догадка, основанная на предоставленной информации, является несоответствием между клиентом и сервером, возможно, безопасность включена для одного и выключена для другого.

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