【问题标题】:Message "Could not generate schema document" in WCF help pageWCF 帮助页面中的消息“无法生成架构文档”
【发布时间】:2013-07-30 04:29:16
【问题描述】:

我有一个 Rest API (WCF Net 4.0):

[ServiceContract]
interface ISubscriptionService
{
    [OperationContract]
    [WebInvoke(Method = "GET", UriTemplate = Routing.ProductsRoute, BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
    [Description("Получение информации о продуктах")]
    ProductsResult Products(string timestamp, string transaction_id);
}

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any, InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single, IncludeExceptionDetailInFaults = true)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
class SubscriptionService : ISubscriptionService
{
    public ProductsResult Products(string timestamp, string transaction_id)
    {
        SubscriptionProcessing processing = new SubscriptionProcessing();
        processing.SaveHistory(WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri);
        return processing.GetProducts(timestamp,  transaction_id);
    }
}

Web.config:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
  </system.web>
  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="false"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="DefaultEndPointBehavior">
          <webHttp helpEnabled="true" />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <services>
      <service name="CloudWebAPI.SubscriptionService">
        <endpoint address="" kind="webHttpEndpoint" behaviorConfiguration="DefaultEndPointBehavior" contract="CloudWebAPI.ISubscriptionService" />
      </service>
    </services>
  </system.serviceModel>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE"/>
        <add name="Access-Control-Allow-Origin" value="*"/>
        <add name="Access-Control-Allow-Headers" value="Content-Type"/>
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

类产品结果:

[DataContract(Name = "result", Namespace = "")]
public class ProductsResult : CommonResult
{
    public ProductsResult()
    {
        Products = new List<ProductResult>();
    }

    [DataMember(Name = "products", Order = 3)]
    public List<ProductResult> Products { get; set; }
}

类 CommonResult:

[DataContract(Name = "result", Namespace = "")]
public class CommonResult
{
    public CommonResult()
    {
        TransactionId = string.Empty;
        Error = new ErrorResult();
    }

    [DataMember(Name = "transaction_id", Order = 1)]
    public string TransactionId { get; set; }
    [DataMember(Name = "error", Order = 2)]
    public ErrorResult Error { get; set; }
}

类错误结果:

[DataContract(Name = "error", Namespace = "")]
public class ErrorResult
{
    public ErrorResult()
    {
        Code = 0;
        Message = string.Empty;
    }

    [DataMember(Name = "error", Order = 1)]
    public int Code { get; set; }
    [DataMember(Name = "message", Order = 2)]
    public string Message { get; set; }
}

打开页面.../rest/SubscriptionService.svc/help/operations/Products,我得到:

Message direction   Format  Body
Request N/A The Request body is empty.
Response    Unknown Could not generate schema document.

但如果您更改 ProductsResult 类的属性 [DataContract (Name = "blabla", Namespace = "")],一切正常:

Response    Xml Example,Schema
Response    Json    Example
The following is an example response Xml body:
...

是什么原因?

【问题讨论】:

  • 您在其中包含了许多似乎无关紧要的代码(您说问题几乎出在产品结果中)。您应该删除问题中不必要的部分,因为点击看起来并不可怕
  • 谢谢,当我尝试清理代码时,我意识到了问题。问题是 Name = "result" 类继承的重复。

标签: c# xml json wcf auto-generate


【解决方案1】:

正如 ask125342 在上面的评论中所说,类不能具有与其继承的类相同的 Name 装饰器 - 这将破坏 WCF 帮助页面的自动生成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 2011-09-21
    • 2010-10-17
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多