Сложные типы данных в WCF? - PullRequest
21 голосов
/ 15 октября 2008

Я столкнулся с проблемой при попытке вернуть объект, который содержит коллекцию дочерних объектов, которые снова могут содержать коллекцию объектов внуков. Я получаю сообщение об ошибке «Соединение принудительно закрыто хостом».

Есть ли способ заставить эту работу? В настоящее время у меня есть структура, похожая на это:

псевдокод:

Person:
IEnumerable<Order>

Order:
IEnumerable<OrderLine>

Все три объекта имеют атрибут DataContract, а все открытые свойства, которые я хочу раскрыть (включая IEnumerable), имеют атрибут DataMember.

У меня есть несколько OperationContract в моем сервисе, и все методы, возвращающие один объект ИЛИ IEnumerable объекта, работают отлично. Только когда я пытаюсь вложить IEnumerable, получается плохо. Также в моей справке по обслуживанию клиентов я выбрал общий список в качестве типа моей коллекции. Я просто хочу подчеркнуть, что только одна из моих операций / методов терпит неудачу с этой ошибкой - остальные работают отлично .

РЕДАКТИРОВАТЬ (более подробное описание ошибки):

[SocketException (0x2746): An existing connection was forcibly closed by
the remote host]
[IOException: Unable to read data from the transport connection:
An existing connection was forcibly closed by the remote host.]
[WebException: The underlying connection was closed: An unexpected
error occurred on a receive.]
[CommunicationException: An error occurred while receiving the HTTP
response to http://myservice.mydomain.dk/MyService.svc. This could
be due to the service endpoint binding not using the HTTP protocol.
This could also be due to an HTTP request context being aborted by
the server (possibly due to the service shutting down). See server
logs for more details.]

Я пытался искать журналы, но не могу их найти ... также я использую WSHttpBinding и конечную точку http.

Ответы [ 14 ]

0 голосов
/ 22 января 2010

Не возвращайте литерал IEnumerable в контракте, есть известная ошибка WCF IEnumerable

0 голосов
/ 28 ноября 2008

Я не знаю, почему это может произойти. но у меня были похожие проблемы.

Я изменил свои enums.remove индексы (например, ASNOrder = 1, -> ASNOrder,), и ошибка не возникла.

0 голосов
/ 15 октября 2008
Server Error in '/' Application.
--------------------------------------------------------------------------------

An existing connection was forcibly closed by the remote host 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  

Stack Trace: 


[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) +93
   System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) +119

[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) +267
   System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size) +25
   System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead) +306

[WebException: The underlying connection was closed: An unexpected error occurred on a receive.]
   System.Net.HttpWebRequest.GetResponse() +1532114
   System.ServiceModel.Channels.HttpChannelRequest.WaitForReply(TimeSpan timeout) +40

[CommunicationException: An error occurred while receiving the HTTP response to http://Zzzstrukturservice.xxx.dk/ZzzstrukturService.svc. This could be due to the service endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by the server (possibly due to the service shutting down). See server logs for more details.]
   System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +2668969
   System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +717
   xxx.Services.ZzzstrukturServiceClient.ZzzstrukturServiceProxy.IZzzstrukturService.GetMatrixSet(Int32 matrixSetId) +0
   xxx.Services.ZzzstrukturServiceClient.ZzzstrukturRepository.GetMatrixSetById(Int32 matrixSetId) in f:\ccnet\work\xxx.Zzzstruktur\1. Presentation Layer\ZzzstrukturServiceClient\ZzzstrukturRepository.cs:90
   xxx.yyy.yyyWeb.AnnoncePage.OnLoad(EventArgs e) in f:\ccnet\work\yyyV2\1. Presentation Layer\yyyWeb\Annonce.aspx.cs:40
   System.Web.UI.Control.LoadRecursive() +47
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.1433; ASP.NET Version:2.0.50727.1433 
0 голосов
/ 15 октября 2008

вы указали в конфигурации своего поведения службы? кажется, что некоторая информация отсутствует в этой трассировке стека.

Вы можете получить исключение на стороне сервера (например, в режиме отладки в Visual Studio или с помощью библиотеки журналов, такой как log4net).

Вы пытались вызывать некоторые другие методы (например, простой helloworld ()) для той же службы, чтобы убедиться, что сама конфигурация службы работает? этот вид excino также может указывать на некоторые проблемы с сериализацией. какие типы вы хотите отправить по проводам? Вы где-нибудь используете KnownType?

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