[ServiceContract]public interface IReceiveData{ [OperationContract] [WebInvoke(Method = "GET",BodyStyle = WebMessageBodyStyle.bare,ResponseFormat = Webmessageformat.Xml,UriTemplate = "picture/")] //this line is wrong though Stream Getimage(int wIDth,int height);}public class RawDataService : IReceiveData{ public Stream Getimage(int wIDth,int height) { // Although this method returns a jpeg,it can be // modifIEd to return any data you want within the stream Bitmap bitmap = new Bitmap(wIDth,height); for (int i = 0; i < bitmap.WIDth; i++) { for (int j = 0; j < bitmap.Height; j++) { bitmap.SetPixel(i,j,(Math.Abs(i - j) < 2) ? color.Blue : color.Yellow); } } MemoryStream ms = new MemoryStream(); bitmap.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg); ms.position = 0; WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; return ms; }}
在我的主机应用程序:
class Program { static voID Main(string[] args) { string baseAddress = "http://" + Environment.Machinename + ":8000/Service"; ServiceHost host = new ServiceHost(typeof(RawDataService),new Uri(baseAddress)); host.AddServiceEndpoint(typeof(IReceiveData),new WebhttpBinding(),"").Behaviors.Add(new WebhttpBehavior()); host.open(); // this line Console.Writeline("Host opened"); Console.Readline();
我收到此错误:
Operation ‘Getimage’ in contract ‘IReceiveData’ uses GET,but also has
body parameter ‘wIDth’. GET operations cannot have a body. Either make
the parameter ‘wIDth’ a UriTemplate parameter,or switch from
WebGetAttribute to WebInvokeAttribute.
我不知道你如何为图像设置webinvoke / UriTemplate方法,或者如何获取图像并将其返回.在这个例子中,有人可以发布正确的方式来显示图像.
编辑
如果我尝试以下答案,并在导航到http://www.localhost.com:8000/Service/picture?wIDth=时使用UriTemplate =“picture?w = {wIDth}& h = {height}”作为我的UriTemplate 50& height = 40我在我的代码中收到错误:
public Stream Getimage(int wIDth,int height) { Bitmap bitmap = new Bitmap(wIDth,height); // this line for (int i = 0; i < bitmap.WIDth; i++) { for (int j = 0; j < bitmap.Height; j++) { bitmap.SetPixel(i,(Math.Abs(i - j) < 2) ? color.Blue : color.Yellow); } } MemoryStream ms = new MemoryStream(); bitmap.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg); ms.position = 0; WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; return ms; }
哪些状态ArguementException未被用户代码处理:参数无效.
解决方法 在属性中,您需要告诉运行时您期望宽度和高度作为URL参数.目前,运行时假定您在没有参数的情况下调用URL,但被调用的方法需要参数,因此运行时实际上不知道如何找到要传递给宽度和高度的方法的值.
这看起来像
[WebInvoke(Method = "GET",UriTemplate = "picture/{wIDth}/{height}")]Stream Getimage(string wIDth,string height){ int w,h; if (!Int32.TryParse(wIDth,out w)) { // Handle error: use default values w = 640; } if (!Int32.TryParse(height,out h)) { // Handle error use default values h = 480; } ....}
你需要调用http://test.tld/picture/320/200这样的URL.
总结以上是内存溢出为你收集整理的c# – body参数’width’. GET *** 作不能拥有一个机构?全部内容,希望文章能够帮你解决c# – body参数’width’. GET *** 作不能拥有一个机构?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)