【发布时间】:2014-01-05 18:13:30
【问题描述】:
我正在尝试通过 WCF 将图像保存在数据库中。这是我的代码。
public void saveImage(Stream stream, string size)
{
//int intsize = Convert.ToInt32(size);
byte[] buffer = new byte[10000];
int bytesRead, totalBytesRead = 0;
string encodedData = "";
do
{
bytesRead = stream.Read(buffer, 0, buffer.Length);
encodedData = encodedData + Convert.ToBase64String(buffer,
Base64FormattingOptions.InsertLineBreaks);
totalBytesRead += bytesRead;
} while (bytesRead > 0);
这就是合同。
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "SaveImage/{size}")]
void saveImage(Stream stream, string size);
最后这是我的配置文件的一部分
<system.serviceModel>
<services>
<service behaviorConfiguration="RestServiceBehavior" name="ABBStreamService.ABBConnectStreamWCF">
<endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="webHttpBinding" contract="ABBStreamService.IABBConnectStreamWCF" />
</service>
</services>
<bindings>
<webHttpBinding>
<binding name="webHttpBinding" transferMode="Streamed" maxReceivedMessageSize="2147483647" maxBufferSize="10485760" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00">
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="1000000" />
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="RestServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
当我尝试仅使用 Stream 作为参数运行服务时,它可以工作。但是当我尝试添加另一个参数时它失败了。
【问题讨论】:
-
失败怎么办?错误是什么,参数是什么?
-
抱歉,我的描述可能不完整。当 saveImage 方法只有 Stream 作为参数时,我的服务正在工作。我收到此错误“由于内部错误,服务器无法处理请求。”
-
该错误被提供给客户端以隐藏可能存在安全风险的真正错误。如果您调试服务(使用日志记录或调试),您应该会发现实际错误。也看看 InnerException 的
-
流式操作中不能有多个参数。 “流式传输中发生的操作最多可以与一个输入或输出参数签订合同。” (msdn.microsoft.com/en-us/library/ms731913%28v=vs.110%29.aspx)
-
这篇文章应该可以帮到你:codeproject.com/Articles/166763/…