6

この質問で起こっていることと同様に、MessageContract を WCF サービスに追加しようとしています: WCF: メッセージ コントラクトでのストリーミングの使用

ここに私が得る例外があります: System.ServiceModel.Channels.Message 型のパラメーターまたは戻り値の型、または MessageContractAttribute と異なる型の他のパラメーターを持つ型があるため、操作 'UploadFile' をロードできませんでした。System.ServiceModel.Channels.Message または MessageContractAttribute を持つ型を使用する場合、メソッドは他の型のパラメーターを使用してはなりません。

ここに私の契約があります:

[ServiceContract]
public interface IFile
{
    [OperationContract]
    bool UploadFile(FileUpload upload);
}
[MessageContract]
public class FileUpload
{
    [MessageHeader(MustUnderstand = true)]
    public int Username { get; set; }
    [MessageHeader(MustUnderstand = true)]
    public string Filename { get; set; }
    [MessageBodyMember(Order = 1)]
    public Stream ByteStream { get; set; }
}

app.config で使用しているバインド構成は次のとおりです。

  <netTcpBinding>
    <binding name="TCPConfiguration" maxReceivedMessageSize="67108864" transferMode="Streamed">
      <security mode="None" />
    </binding>
  </netTcpBinding>

現在、これは私が使用しているバインディングのタイプと関係があるのではないかと考えていますが、完全にはわかりません.

4

2 に答える 2

7

コメントから、メッセージ コントラクトの使用を開始すると、すべてのパラメーターにメッセージ コントラクトを使用する必要があるという問題があるように見えます。これは、メソッドが bool を返せないことを意味し、FileUploadResult などの別のメッセージ コントラクトを返さなければならないことを意味します。

void を返すように変更して、それが読み込まれるかどうかを確認し、代わりにメッセージ コントラクトとして属性付けされたクラスを返すように変更するかどうかを確認してください。

この MSDN ページの最初のメモは、この問題について警告しており、詳細情報を提供するリンクが含まれています。

于 2011-05-24T06:26:53.507 に答える