私は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());
}
}