2012-07-09 121 views
0

我与WCF工作,并试图返回对象列表(或数组)回到我的客户。 它对于标准类型似乎工作正常,我可以返回自定义对象,但不包含自定义对象列表(即使列表中只有一个项目)。WCF - 返回一个自定义列表

我读过关于这一主题的相当数量,但似乎无法得到它的任何地方。 它编译好的,但在客户端上,当我到我的功能,客户端抛出一个异常,同时接收HTTP响应

“时发生错误。这可能是由于 的服务端点绑定不使用HTTP协议。这 也可能是由于由 服务器(可能是由于服务关停)被中止的HTTP请求上下文。参见服务器日志 更多的细节。”

我已经尝试了一些想法,目前我的目标是这样的:

[DataContract] 
    public class FilePacket : IDisposable 
    { 
     //[MessageHeader(MustUnderstand = true)] 
     [DataMember] 
     public string fileName; 

     //[MessageHeader(MustUnderstand = true)] 
     [DataMember] 
     public long fileSize; 

     //[MessageBodyMember(Order = 1)] 
     [DataMember] 
     public System.IO.Stream fileByteStream; 

     public void Dispose() 
     { 
      if (fileByteStream != null) 
      { 
       fileByteStream.Close(); 
       fileByteStream = null; 
      } 
     } 
    } 
+0

您的运营合约是什么样的? – 2012-07-09 14:50:30

+0

我试过[OperationContract] FilePacket syncStuff(); [OperationContract] FilePacket [] syncStuff(); [OperationContract] List syncStuff(); etc – HaemEternal 2012-07-09 14:52:05

+0

[OperationContract] FilePacket [] syncStuff();似乎是正确的,应该工作。 – 2012-07-09 14:58:09

回答

0

现在我已经得到了这个工作(感谢帮助乡亲)。 似乎有各种各样的事情可能会出错并导致问题。 首先,我从Stream更改为MemoryStream;并确保它始终如此使用(我在尝试几个选项时注意到可以将DataContract设置为使用Stream,实际上使用的是FileStream;这造成了严重破坏,并花了几分钟时间才注意到) 。

我从DataContract变为MessageContract(确保设置的MemoryStream为[MessageBodyMember(订单= 1)])。

在应用程序配置,设置我的transferMode为“流”,确保了MAXBUFFERSIZE被设置为一个巨大的价值。

1

你必须做的第一件事是检查你是否在使用结合作为transferModeStreamed

<system.serviceModel> 
    … 
    <bindings> 
     <basicHttpBinding> 
     <binding name="ExampleBinding" transferMode="Streamed"/> 
     </basicHttpBinding> 
    </bindings> 
    … 
<system.serviceModel> 

第二件事你应该使用MessageContract

[MessageContract] 
public class FilePacket 
{ 
    [MessageHeader] 
    public string fileName; 

    [MessageBodyMember] 
    public System.IO.Stream fileByteStream; 

    ... 
} 

除了fileByteStream剩余财产,你应该MessageHeader属性装饰。

的最后一件事就是确保你已经为maxReceivedMessageSize财产克服尺寸限制设置正确的值。

看到这些引用

http://msdn.microsoft.com/en-us/library/ms733742.aspx

http://msdn.microsoft.com/en-us/library/ms789010.aspx

+0

嗨马克,谢谢你的回应。 我已经给你的建议一个尝试,不幸的是,行为仍然是一样的。一个空fileByteStream会通过罚款,但否则我会得到一个异常。 – HaemEternal 2012-07-10 07:17:25

相关问题