2

私はWCFサービスを持っており、クライアントがこのサービスから画像を受け取るようにしたいclient.GetStream();.MemoryStream

    public Stream GetStream()
    {
        Rectangle bounds = Screen.GetBounds(Point.Empty);
        using (Bitmap bmp = new Bitmap(bounds.Width, bounds.Height))
        {
            using (Graphics g = Graphics.FromImage(bmp))
            {
                g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
            }
            MemoryStream ms = new MemoryStream();
            bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            img = Image.FromStream(ms);
            ms.Position = 0;
            OperationContext.Current.OutgoingMessageHeaders.Action = "image/jpeg";
            return ms;
        }
    }

IScreenShot インターフェイス:

[ServiceContract]
public interface IScreenShot
{
    [OperationContract]
    Stream GetStream();
}

最初に得た例外はMaxReceivedMessageSizeに関するもので、それを 2MB に増やしました。
今、私は新しい例外を持っています:

Multiple headers with name 'Action' and namespace 'http://www.w3.org/2005/08/addressing' found.

この例の手順に従っていることに注意してください。

MSDNのサンプル例(ストリームとして画像を返す)です が、NetTcpBindingを使用しているという違いがあります。

コードに何か問題がありますか?または、そのように nettcpbinding で動作しませんか?

ここにクライアントがあります:

public partial class ScreenImage : Form
{
    ScreenShotClient client;

    public ScreenImage(string baseAddress)
    {
        InitializeComponent();
        NetTcpBinding binding = new NetTcpBinding(SecurityMode.None);
        binding.MaxReceivedMessageSize = 1024 * 1024 * 2;
        client = new ScreenShotClient(binding, new EndpointAddress(baseAddress));
    }

    private void btnNew_Click(object sender, EventArgs e)
    {
        picBox.Image = Image.FromStream(client.GetStream());
    }
}
4

0 に答える 0