#wcf
#wcf
Вопрос:
У меня эта очень странная ошибка…
Я разрабатываю службу 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 ClassLibHandlerFactory.cs:75
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 100
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Booleanamp; 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>
Привязки web.config СЕРВЕРА являются:
<bindings>
<basicHttpBinding>
<binding name="ApiBinding" />
</basicHttpBinding>
<webHttpBinding>
<binding name="ApiBinding" />
</webHttpBinding>
</bindings>
/ Carsten
Комментарии:
1. К чему ты привязываешь, мой друг? Не могли бы вы сообщить нам, пожалуйста? Какова безопасность?
2. Теперь я добавил привязку из web.config в нижней части текста вопроса. Спасибо
3. Есть идеи? Вместо этого я попытался вернуть простые типы — например, int — и это работает нормально.
4. Почему привязка содержит повторяющиеся записи?
5. Я не знаю — я не создавал эту штуку сам, но перенял разработку у компании. Я просто удостоверяюсь, что обе записи имеют одинаковые настройки.
Ответ №1:
По предоставленной вами информации, которая, по-видимому, относится только к стороне сервера, невозможно сказать, в чем проблема.
Итак:
- Обновите информацию с подробностями на стороне клиента
Теперь ошибка сообщает мне, что имеет место несоответствие привязки или ошибка безопасности, хотя для безопасности установлено значение None. Итак, моя догадка, основанная на предоставленной информации, заключается в несоответствии привязки между клиентом и сервером, возможно, безопасность включена для одного и выключена для другого.
Комментарии:
1. На самом деле web.config, который я впервые опубликовал, был конфигурацией клиента. Теперь я также обновил привязки сервера web.config, которые содержат гораздо меньше информации. Я пока не очень разбираюсь в этом… Должны ли они быть точными совпадениями?