WCF没有发送流(net).tcp绑定)

本文关键字:net tcp 绑定 WCF | 更新日期: 2023-09-27 18:11:23

我无法使用net发送流。tcp绑定。我有messagcontract发送数据,WCF正在传递文件名,但流FileByteStream是空的

[MessageContract]
public class FileUploadMessage
{
    [MessageHeader(MustUnderstand = true)]
    public string Filename;
    [MessageBodyMember(Order = 1)]
    public Stream FileByteStream;
}

我的服务:

[ServiceContract]
public interface ISlaveService
{
    [OperationContract]
    FileUploadMessage SendPattern(FileUploadMessage image);
}

服务实现(发送和返回流都不工作):

public FileUploadMessage SendPattern(FileUploadMessage image)
{
    try
    {
        ImageSource source = BitmapFrame.Create(image.FileByteStream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
        MainWindow.Instance.imagePattern.Source = source;
        Stream imageStream2 = File.OpenRead(@"C:'aaa.jpg");
        image.FileByteStream = imageStream2;
        return image;
    }
    catch (Exception ex)
    {
        // TODO: add log
        return null;
    }
}

启动服务:

public static void StartService()
{
    try
    {
        Uri tcpUrl = new Uri("net.tcp://localhost:" + Config.Instance().LocalPort + "/SlaveService");
        host = new ServiceHost(typeof(SlaveService), tcpUrl);
        NetTcpBinding tcpbinding = new NetTcpBinding();
        tcpbinding.Security.Mode = SecurityMode.None;
        tcpbinding.TransferMode = TransferMode.Streamed;
        tcpbinding.MaxReceivedMessageSize = 2147483647;
        tcpbinding.ReaderQuotas.MaxArrayLength = 2147483647;
        tcpbinding.ReaderQuotas.MaxBytesPerRead = 2147483647;
        tcpbinding.ReaderQuotas.MaxStringContentLength = 2147483647;
        tcpbinding.ReaderQuotas.MaxDepth = 2147483647;
        host.AddServiceEndpoint(typeof(ISlaveService), tcpbinding, "net.tcp://localhost:" + Config.Instance().LocalPort + "/SlaveService");
        ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
        smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
        host.Description.Behaviors.Add(smb);
        host.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexTcpBinding(),
        "net.tcp://localhost:" + Config.Instance().LocalPort + "/SlaveService/mex");
        host.Open();
    }
    catch (Exception ex)
    {
        //TO DO: Logger.Add("Failed to start Slave service. " + ex.Message);
    }
}

客户端连接:

public bool Connect(string address)
{
    NetTcpBinding tcpbinding = new NetTcpBinding();
    tcpbinding.Security.Mode = SecurityMode.None;
    tcpbinding.TransferMode = TransferMode.Streamed;
    tcpbinding.MaxReceivedMessageSize = 2147483647;
    tcpbinding.ReaderQuotas.MaxArrayLength = 2147483647;
    tcpbinding.ReaderQuotas.MaxBytesPerRead = 2147483647;
    tcpbinding.ReaderQuotas.MaxStringContentLength = 2147483647;
    tcpbinding.ReaderQuotas.MaxDepth = 2147483647;
    EndpointAddress endpoint = new EndpointAddress("net.tcp://" + address + "/SlaveService");
    var channelFactory = new ChannelFactory<ISlaveService>(tcpbinding, endpoint);
    client = null;
    try
    {
        client = channelFactory.CreateChannel();
    }
    catch (Exception e)
    {
        Logger.Add("Exception occured while trying to connect. " + e.Message);
        if (client != null)
        {
            ((ICommunicationObject)client).Abort();
        }
        return false;
    }
    return true;
}

我可以发送文本和数字,但是当我试图发送流时,它发送的是一个空流。我在论坛上说MaxReceivedMessageSize应该是一个解决方案,但它并没有解决我的问题。请帮助

WCF没有发送流(net).tcp绑定)

合同内容如下:

    [OperationContract]
    FileUploadMessage SendPattern(Stream image);