首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF MessageContract格式问题

WCF MessageContract格式问题
EN

Stack Overflow用户
提问于 2011-09-26 01:51:17
回答 1查看 276关注 0票数 0

我有一个MessageContact的WCF定义和客户端调用函数的问题。

场景;客户端使用字符串类型引用ID调用服务,服务器响应AudioObject类型的实例。AudioObject由流( MessageBodyMember )和FormatObject ( MessageHeader )组成。

下面是WCF代码片段。

代码语言:javascript
复制
[ServiceContract]
public interface IAudioStreamService
{
    [OperationContract]
    AudioObject GetAudioDataStream(StringMessage RefID);
}

//StringMessageContract
[MessageContract]
public class StringMessage
{
    [MessageBodyMember]
    public string Name;
}

[MessageContract]
public class AudioObject
{
    Stream _audioStream;
    AudioFormat _audioFormat;

    [MessageBodyMember (Order=1)]
    public Stream AudioStream
    {
        get { return _audioStream; }
        set { _audioStream = value; }
    }

    [MessageHeader(MustUnderstand=true)]
    public AudioFormat AudioFormat
    {
        get { return _audioFormat; }
        set { _audioFormat = value; }
    }
}

[DataContract]
public class AudioFormat
{
    int _nChannels;
    int _nKilloBitsPerSec;
    int _nSamplesPerSec;

    [DataMember(Name="nChannels", Order=0, IsRequired=true)]
    public int nChannels
    {
        get { return _nChannels; }
        set { _nChannels = value; }
    }
    [DataMember(Name = "nKilloBitsPerSec", Order = 1, IsRequired = true)]
    public int nKilloBitsPerSec
    {
        get { return _nKilloBitsPerSec; }
        set { _nKilloBitsPerSec = value; }
    }
    [DataMember(Name = "nSamplesPerSec", Order = 2, IsRequired = true)]
    public int nSamplesPerSec
    {
        get { return _nSamplesPerSec; }
        set { _nSamplesPerSec = value; }
    }
}

客户端代码如下,

代码语言:javascript
复制
BasicHttpBinding binding = new BasicHttpBinding();
binding.MaxReceivedMessageSize = 176160768;                       
EndpointAddress endpointAddress = new EndpointAddress("URLToService");
AudioStreamServiceClient client = new AudioStreamServiceClient(binding, 
endpointAddress);
    AudioFormat audioFormat = client.GetAudioDataStream("000", out serverStream); 

以上代码运行良好。但问题是

为了符合OperationContract,的格式,我期望客户机代码如下所示,

代码语言:javascript
复制
AudioObject audioObject = client.GetAudioDataStream("0000");

但是,我的ServiceReference以相反的方式生成了客户机存根(如代码所示)。有人能解释一下这件事的原因吗。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-26 02:18:06

您可以通过从ClientBase派生类来自己编写客户端,或者编写具有您选择的方法签名的扩展方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7549953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档