1

私は持っている

[OperationContract]
[WebInvoke(Method = "POST",
    ResponseFormat = WebMessageFormat.Xml,
    RequestFormat = WebMessageFormat.Xml,
    BodyStyle = WebMessageBodyStyle.Bare,
    UriTemplate = "projects/{projectname}")]
[return: MessageParameter(Name = "ProjectId")]
Guid CreateProject(String projectName);

しかし、これはまだ戻ります

<guid 
xmlns="http://schemas.microsoft.com/2003/10/Serialization/">00000000-0000-0000-0000-00000000</guid>

「guid」を ProjectId に置き換えるにはどうすればよいですか?

public Guid CreateProject(String projectName)
{
     return Guid.Empty;
}

OperationContract BodyStyle を次のように変更すると、次のようWrappedResponseになります。

<CreateProjectResponse 
    xmlns="http://tempuri.org/">
    <ProjectId>00000000-0000-0000-0000-000000000</ProjectId>
</CreateProjectResponse>

これはほとんど私が望むものですが、不必要にラップしたくありません.

4

2 に答える 2

0

あなたはあなたが定義したものになります。空の GUID を XML 形式で受け取るように定義し、空の GUID を XML で返します。すべてが正しいです。

GUID をある種の文字列 ID に変換する必要があるかもしれません。Guid.NewGuid().ToString("N")

xml を期待していない場合は、属性に適合し、クライアントからの HTTP Accept ヘッダーを使用する必要があります。たとえば、Json Accept: application/json、または string -plain/text

UPD: 少し明確になりました。あなたは実際にXML構造を変更する方法を尋ねます。ボックスの XML フォーマッタから既に実装しているため、標準の型には標準の XML 構造を使用することをお勧めします。とにかく、フォーマッタを変更する必要がある場合はWebHttpBehavior、メソッドを拡張してオーバーライドし、WebHttpBehavior.GetReplyDispatchFormatterSystem.ServiceModel.Dispatcher.IDispatchFormatter の独自のカスタム実装を返すことで実行できます (例として、こちらを参照) 。

また、WCF 4 REST を使用しており、このテクノロジはレガシーであることにも言及したいと思います。レガシー プロジェクトやメンテナンスを扱っていない場合は、ASP.NET Web APIを使用することをお勧めします。これと他の多くのことをはるかに簡単に実行できるからです。

于 2013-04-17T13:03:11.433 に答える
0

最も簡単な解決策は、

return new XElement("ProjectId", Guid.Empty);

私が望んでいたものではありませんが、うまくいきます。

于 2013-04-17T20:04:15.547 に答える