如果您有一个简单的示例,说明如何使用WCF接收图像并将该图像保存在自定义文件夹中,那么它们将为我节省大量时间并引导我走上正确的轨道。
我已经看到您可以使用 Stream 类型或 byte [] 类型,但是我做不正确。
非常感谢您的宝贵时间。
答案 0 :(得分:0)
您要消耗来自WCF端点的图像响应吗? 这里的一个例子: https://www.dotnetcurry.com/wcf/723/download-files-using-wcf-rest-endpoints
答案 1 :(得分:0)
我做了一个演示,希望它对您有用。
服务器(WCF服务应用程序)
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(Method ="POST",RequestFormat =WebMessageFormat.Json,ResponseFormat =WebMessageFormat.Json)]
Task UploadStream(Stream stream);
}
public class Service1 : IService1
{
public async Task UploadStream(Stream stream)
{
using (stream)
{
//save file to local folder
using (var file=File.Create(@"C:\"+Guid.NewGuid().ToString()+".png"))
{
await stream.CopyToAsync(file);
}
}
}
}
Web.config(WCF配置)
<system.serviceModel>
<services>
<service name="WcfService3.Service1">
<endpoint address="" binding="webHttpBinding" contract="WcfService3.IService1" bindingConfiguration="mybinding" behaviorConfiguration="rest"></endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
</service>
</services>
<bindings>
<webHttpBinding>
<binding name="mybinding" receiveTimeout="00:30:00" sendTimeout="00:30:00" maxReceivedMessageSize="104857600" transferMode="Streamed">
<security mode="None"></security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="rest">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
对于创建流传输模式服务,我们还可以使用BasicHttpBinding创建soap服务。
https://social.msdn.microsoft.com/Forums/vstudio/en-US/02733eae-a871-4655-9a2b-0ca1095b07ea/problems-when-uploading-a-stream-to-wcf?forum=wcf
在客户端,您可以使用第三方库来调用WCF Rest服务,例如ksoap。但是您也可以使用HttpClient库发送http请求。就像下面的代码片段一样(HttpClient是.Net库,不是Java库,但是用法类似)。
class Program
{
static void Main(string[] args)
{
HttpClient client = new HttpClient();
HttpContent content = new StreamContent(File.OpenRead(@"2.png"));
Task.WaitAll(client.PostAsync("http://10.157.18.36:8800/service1.svc/UploadStream", content));
Console.WriteLine("OK");
}
}
请随时告诉我是否有什么可以帮忙的。