分类
学习笔记

解决The server was unable to process the request,服务无法处理请求

进行WCF编程过程中会遇到这样的错误:服务无法处理的请求由于内部错误。   

  具体信息如下:

  The server was unable to process the request due to an internal error.  For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs.

  错误截图:

1245068403_ddvip_1481

   由于内部错误,无法处理请求。

  解决办法:

  在服务行为里配置错误属性即可:

  添加如下代码到服务类:

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]

这个是加在服务类前面。

分类
学习笔记

Rest服务禁用WebDAV

在IIS7.0中,使用了WebDAV。

rest服务创建在虚拟目录中,调用中服务无法进行delete、put等操作,只有post和Get请求访问正常。禁用WebDaV访问正常。可见不允许的谓词put等由于WebDAV引起。

rest服务config文件中,按照以下配置,可让rest服务不启用webDav服务运行。

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" runManagedModulesForWebDavRequests="true" >
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
       <remove name="WebDAVModule" />
    </modules>
        <handlers>
            <remove name="WebDAV" />
        </handlers>
  </system.webServer>
分类
学习笔记

WCF REST service 400 Bad Request

WCF REST service 返回是400 错误。

默认超过65K传输时产生异常。解决Webcofig中webHttpEndpoint配置maxReceivedMessageSize 等。

<!-- 
            Configure the WCF REST service base address via the global.asax.cs file and the default endpoint 
            via the attributes on the <standardEndpoint> element below
        -->
        <standardEndpoint name="" maxBufferSize="2147483647"  maxReceivedMessageSize="2147483647" maxBufferPoolSize="0" helpEnabled="true" automaticFormatSelectionEnabled="true" faultExceptionEnabled="true">
          <readerQuotas maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"  maxDepth ="2147483647" />
        </standardEndpoint>

以上放置在webHttpEndpoint节点下。

VS2010中有配置编辑器,可以用来编辑WCF中的webconfig

参考文章:

http://stackoverflow.com/questions/6599355/wcf-rest-service-400-bad-request

http://msdn.microsoft.com/zh-cn/ff657121

分类
学习笔记

WCF:REST服务接收http post数据的处理方法

通过定义UriTemplate,WebInvoke等就可以处理。

如下:

stream 输入流 例如:

[WebInvoke(UriTemplate = "import?url={encodedServiceUrl}", Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
        public ImportRest Create(Stream pstream, string encodedServiceUrl)

UriTemplate定义了参数匹配关系:我的参数如encodedServiceUrl,类型必须string

获取POST过来的数据信息。

定义Stream pstream参数就可以了。

获取代码如下:

 //获取requestBody
            string postJson = string.Empty;
            using (var reader = OperationContext.Current.RequestContext.RequestMessage.GetReaderAtBodyContents())
            {
                if (reader.Read())
                {
                   postJson = new string(Encoding.UTF8.GetChars(reader.ReadContentAsBase64()));
                }
            }

同样可以获取httpheader噢,如下:

 //获取requestHeard
            WebHeaderCollection headerCollection = WebOperationContext.Current.IncomingRequest.Headers;
            foreach (string item in headerCollection)
            {
                string value = headerCollection.Get(item);
            }