我正在使用WCF创建一些REST服务。 其中一个Rest Service方法需要将字节数组作为参数(图片为字节数组)并返回一些对象。 我使用IIS运行此服务。 但这不起作用。
我写的代码:
[ServiceContract]
public interface IPicService
{
[OperationContract, WebInvoke(Method="POST", UriTemplate = "GetPicReport/{imageName}")]
Report GetPicReport( string imageName, Stream image );
}
[ServiceBehavior( AddressFilterMode = AddressFilterMode.Any )]
public class PicService: IPicService
{
public Report GetPicReport( string imageName, Stream image )
{
return new Report ();
}
}
我使用资源管理器检查此代码 - 但是我收到有关缺少参数(图像流)的错误
我该如何测试? 我不能使用WCF测试客户端 - 所以我编写了创建http调用的简单应用程序 - 此方法返回错误404(未找到服务器)
答案 0 :(得分:1)
帖子here展示了如何像您的一样实施服务,以及测试客户端(使用HttpWebRequest
)。您可以做的另一件事是在服务器上启用跟踪,它可能会告诉您为什么请求被拒绝。
答案 1 :(得分:1)
您可以尝试以下代码:
var request = WebRequest.Create(string.Concat(serviceUrl, resourceUrl)) as HttpWebRequest;
if (request != null)
{
request.ContentType = "text/xml";
request.Method = method;
}
//var objContent = HttpContentExtensions.CreateDataContract(requestBody);
if(method == "POST" && requestBody != null)
{
//byte[] requestBodyBytes = ToByteArrayUsingXmlSer(requestBody, "http://schemas.datacontract.org/2004/07/XMLService");
byte[] requestBodyBytes = ToByteArrayUsingDataContractSer(requestBody);
request.ContentLength = requestBodyBytes.Length;
using (Stream postStream = request.GetRequestStream())
postStream.Write(requestBodyBytes, 0, requestBodyBytes.Length);
//request.Timeout = 60000;
}
if (request != null)
{
var response = request.GetResponse() as HttpWebResponse;
if(response.StatusCode == HttpStatusCode.OK)
{
Stream responseStream = response.GetResponseStream();
if (responseStream != null)
{
var reader = new StreamReader(responseStream);
responseMessage = reader.ReadToEnd();
}
}
else
{
responseMessage = response.StatusDescription;
}
}