C# WCF SOAP服务无法处理该消息,因为它发送多部分消息,并且需要“text/xml”;字符集=utf-8'
我对WCFSOAP1.1配置有问题。我已经用basicHttpBinding创建了一个WCF服务。下面是配置。该服务是WCF_SOAP_REST_service.BiasImpl:C# WCF SOAP服务无法处理该消息,因为它发送多部分消息,并且需要“text/xml”;字符集=utf-8',c#,wcf,soap,utf-8,multipart,C#,Wcf,Soap,Utf 8,Multipart,我对WCFSOAP1.1配置有问题。我已经用basicHttpBinding创建了一个WCF服务。下面是配置。该服务是WCF_SOAP_REST_service.BiasImpl: <system.serviceModel> <services> <service behaviorConfiguration="ServBehave" name="WCF_SOAP_REST_SERVICE.Service"> <en
<system.serviceModel>
<services>
<service behaviorConfiguration="ServBehave" name="WCF_SOAP_REST_SERVICE.Service">
<endpoint address="soapService" binding="basicHttpBinding" contract="WCF_SOAP_REST_SERVICE.Service" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
<service behaviorConfiguration="ServBehave" name="WCF_SOAP_REST_SERVICE.BiasImpl">
<endpoint address="soapService" binding="basicHttpBinding" bindingConfiguration="basicHttp"
contract="WCF_SOAP_REST_SERVICE.BiasImpl" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="basicHttp" bypassProxyOnLocal="true" maxBufferSize="2147483647"
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
useDefaultWebProxy="false" messageEncoding="Mtom" >
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServBehave">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
这就是实现:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class CodificationImpl : Codification
{
.
.
.
public CheckQualityResponse CheckQuality(CheckQuality request)
{
//implementation goes here
}
.
.
.
}
检查质量等级:
[System.Diagnostics.DebuggerStepThrough()]
[System.CodeDom.Compiler.GeneratedCode("System.ServiceModel", "4.0.0.0")]
[MessageContract(WrapperName="CheckQuality", WrapperNamespace="http://my.custom.url/codification/", IsWrapped=true)]
public partial class CheckQuality
{
[MessageBodyMember(Namespace="http://my.custom.url/codification/", Order=0)]
[System.Xml.Serialization.XmlElement(IsNullable=true)]
public CheckQualityCheckQualityRequest CheckQualityRequest;
public CheckQuality()
{
}
public CheckQuality(CheckQualityCheckQualityRequest CheckQualityRequest)
{
this.CheckQualityRequest = CheckQualityRequest;
}
}
要接受多部分消息,我必须在WCF服务绑定中配置什么?请查找以下可从SOAPUI工作的WCF服务 服务
[ServiceContract]
public interface IImageService
{
[OperationContract]
bool CheckQualityOfImage(CheckQuality objCheckQuality);
}
[DataContract]
public class CheckQuality
{
[DataMember]
public MemoryStream ImageData { get; set; }
[DataMember]
public string ImageFileName{ get; set; }
}
以下接口的实现:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class ImageService : IImageService
{
public bool CheckQualityOfImage(CheckQuality objCheckQuality)
{
if (objCheckQuality != null)
{
if (objCheckQuality.ImageData.Length > 0 && ! String.IsNullOrEmpty(objCheckQuality.ImageFileName))
{
return true;
}
else
{
return false;
}
}
return false;
}
}
服务器上的Web.config
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="noSecurity" maxReceivedMessageSize="2147483647">
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxDepth="64" maxNameTableCharCount="2147483647" />
<security mode="None"></security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="XMLService.ImageService" behaviorConfiguration="default">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="noSecurity" contract="XMLService.IImageService" />
</service>
</services>
<behaviors>
<behavior name="default">
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</behaviors>
</system.serviceModel>
现在,我从SOAPUI的请求如所附的屏幕截图所示
确保与SOAPUI中的请求属性匹配。可以找到有关使用带附件的SOAPUI的更多信息
注意:我对CheckQuality类中的属性做了一些假设,并且我使用了6MB的文件进行上传您能介绍一下您的WCF方法吗?另外,请尝试将readerQuota值设置为大于预期请求大小的值。我更新了我的帖子,以包含服务接口和实现。另外,包括readerQuotas,同样的错误。关于为什么在OperationContract中包含XmlSerializationFormat,有什么具体原因吗??您还可以提供CheckQuality类属性它是使用svcutil自动生成的。但是,如果我删除它,它仍然有相同的错误。如果我错了,请更正我。您托管了一个具有CheckQuality方法的WCF服务。从客户端应用程序.NET应用程序或SOAP UI,您尝试将图像上载到此大小为500KB的服务,但出现异常。我看到您将图像作为附件发送。这不是我的选择。当从SOAPUII发送请求时,附件将转换为流。我使用groovy脚本从文件加载数据。
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class ImageService : IImageService
{
public bool CheckQualityOfImage(CheckQuality objCheckQuality)
{
if (objCheckQuality != null)
{
if (objCheckQuality.ImageData.Length > 0 && ! String.IsNullOrEmpty(objCheckQuality.ImageFileName))
{
return true;
}
else
{
return false;
}
}
return false;
}
}
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="noSecurity" maxReceivedMessageSize="2147483647">
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxDepth="64" maxNameTableCharCount="2147483647" />
<security mode="None"></security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="XMLService.ImageService" behaviorConfiguration="default">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="noSecurity" contract="XMLService.IImageService" />
</service>
</services>
<behaviors>
<behavior name="default">
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</behaviors>
</system.serviceModel>