- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试从 WCF 服务获取 Image
。
我有一个 OperationContract
函数,它返回一个 Image
给客户端,但是当我从客户端调用它时,我得到这个异常(exception):
The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:00:59.9619978'.
客户:
private void btnNew_Click(object sender, EventArgs e)
{
picBox.Picture = client.GetScreenShot();
}
服务.cs:
public Image GetScreenShot()
{
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);
}
using (MemoryStream ms = new MemoryStream())
{
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
return Image.FromStream(ms);
}
}
}
IScreenShot
接口(interface):
[ServiceContract]
public interface IScreenShot
{
[OperationContract]
System.Drawing.Image GetScreenShot();
}
那么为什么会发生这种情况,我该如何解决?
最佳答案
我想通了。
TransferMode.Streamed
或 StreamedResponse
(取决于您的需要)。Stream.Postion = 0
,这样您就可以从头开始读取流。在服务中:
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);
ms.Position = 0; // This is very important
return ms;
}
}
接口(interface):
[ServiceContract]
public interface IScreenShot
{
[OperationContract]
Stream GetStream();
}
在客户端:
public partial class ScreenImage: Form
{
ScreenShotClient client;
public ScreenImage(string baseAddress)
{
InitializeComponent();
NetTcpBinding binding = new NetTcpBinding(SecurityMode.None);
binding.TransferMode = TransferMode.StreamedResponse;
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());
}
}
关于c# - 从 OperationContract 方法返回图像(WCF 服务),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10584260/
我正在尝试托管支持 wshttpbinding 和 basichttpbinding 的 WCF 服务。原因是对于桌面客户端我需要双工,而对于 Windows 移动客户端我不需要。 假设我有 3 个
有没有办法即时生成或更新 OperationContract? 例如: 用户将点击控制面板屏幕上的按钮。 Web 服务或 WCF 服务将更新为具有新功能。 然后其他用户可以从任何地方使用新功能。 我已
最近successful getting my IIS hosted WCF service to work with basic authentication . 自从成功实现以来。我注意到没有记住
我想在我的网络方法中使用松散类型的参数。 我有一个场景,其中客户端可以将 25 个 DataContract 对象中的任何一个发送到 WCF 操作中,例如 proxy1.myFunction(Pers
我想知道如何根据需要在 WCF 中指定 OperationContract 方法的参数,以便生成的 xsd 包含 minOccurs="1"而不是 minOccurs="0"。 例子: [Servic
我有一个 WCF Web 服务,它有一个返回通用集合的方法。现在,我的问题是:我应该将其公开为 ICollection 吗? , List , IList , IEnumerable或者是其他东西?
标记 WCF 方法有什么区别 [OperationContract(IsOneWay = true)] 属性并检查 生成异步 添加服务引用时的操作复选框? 从我读到的内容来看,调用的异步性质似乎只能在
我有一个 WCF 带有 Silverlight 客户端和 的双工服务.NET 3.5 WCF 服务。 我遇到的情况是:在从服务器到客户端的双工推送 OneWay 操作期间,如果客户端通知处理程序中发生
我有一个返回列表的 WCF 服务。 [DataContract] public class EmployeesVM { [DataMember] public int ID { get
我创建了一个 WCF 4 网络服务并将其托管在我的 IIS 7 上,我在发布网络部分提供了以下 服务 URL:在 WCF 项目中: http://localhost:8084/service1.svc
请我需要从这个 XML 更改 FORMULARIO'S 前缀 (Tem: TO Men1:):
我用 [DataMember(IsRequired=true)]使 DataContract 属性成为必需。 OperationContract 参数似乎没有一些 IsRequired 。如何使它们成
我关注定义为 OneWay 的服务,因为它运行时间很长(几分钟)并且我等不及它完成(它在 ASP.NET 应用程序中使用)。 问题是,如果我在服务调用后调用 client.Dispose(),它会阻塞
我关注定义为 OneWay 的服务,因为它运行时间很长(几分钟)并且我等不及它完成(它在 ASP.NET 应用程序中使用)。 问题是,如果我在服务调用后调用 client.Dispose(),它会阻塞
我们正在尝试使用 WCF 和 ICriteria 创建一个很酷的 API,例如: [ServiceContract] public class ProductService { [OperationC
我在我的 wcf 应用程序中创建了一个服务契约(Contract),它包含很多方法。 我觉得为所有这些都写一个 OperationContract 属性很烦人。 有没有什么简单的方法可以说“我的 Se
为什么 WCF 服务函数中需要 OperationContract 属性? 最佳答案 OperationContact 属性显式声明方法是对 ServiceContract 的操作。 为什么需要它?主
我正在尝试从 WCF 服务获取 Image。 我有一个 OperationContract 函数,它返回一个 Image 给客户端,但是当我从客户端调用它时,我得到这个异常(exception): T
我有以下代码: [ServiceContract(Name = "Save{0}")] public ISave where T : BusinessObject { [OperationCo
我有一个 WebServiceHost,用于在控制台应用程序中托管一些 Web 服务。我在我的客户端应用程序中添加了对它的服务引用,并像这样创建代理: var binding = new WebHtt
我是一名优秀的程序员,十分优秀!