2009-05-22 1 views
0

[編集] 私はそれをコード内のコメントにする方法を考え出しました。WS 2008のGeneric Service Contractから生成されたWSDLの問題

は、私が数十を持っている、とすぐに次の契約でのワークフローの数百を持っています:

// v added 
[ServiceBehavior(Namespace = "http://schema.company.com/messages/")] 
//^added 
public abstract class BasicWorkflowSvc<TRequest, TResponse, TWorkflow> : IBasicContract<TRequest, TResponse> 
    where TRequest : class 
    where TResponse : class 
    where TWorkflow : class 
{ 
    //... 
} 

実際の実装は次のようになります:私は一般的な実装を作成している

[ServiceContract(Namespace = "http://schema.company.com/messages/")] 
public interface IBasicContract<TRequest, TResponse> 
    where TRequest : class 
    where TResponse : class 
{ 
    [OperationContract] 
    [XmlSerializerFormat] 
    [ServiceKnownType(typeof(Aggregate))] 
    TResponse GetReport(TRequest inquiry); 

    [OperationContract] 
    [XmlSerializerFormat] 
    [ServiceKnownType(typeof(Aggregate))] 
    string GetRawReport(string guid); 

    [OperationContract] 
    [XmlSerializerFormat] 
    [ServiceKnownType(typeof(Aggregate))] 
    TResponse GetArchiveReport(string guid); 
} 

[XmlSerializerFormat] 
// v changed 
[ServiceContract(Namespace = "http://services.company.com/messages/")] 
//^changed 
public interface IActualProductSvc : IBasicContract<ActualProductRq_Type, ActualProductRs_Type> 
{ 
} 

[ServiceBehavior(Namespace = "http://services.company.com/ActualProduct/v1.0")] 
// v added 
[MessageContract(WrapperNamespace = "http://services.company.com/ActualProduct/v1.0")] 
//^added 
public class ActualProductSvc : BasicWorkflowSvc<ActualProductRq_Type, ActualProductRs_Type, EF>, IActualProductSvc 
{ 
    //... 
} 

私の問題はこれです:私がServ方法はあり

[DebuggerStepThrough()] 
[GeneratedCode("System.ServiceModel", "3.0.0.0")] 
[MessageContract(WrapperName = "GetReport", WrapperNamespace = "http://schema.company.com/messages/", IsWrapped = true)] 
public partial class GetReportRequest 
{ 
    [MessageBodyMember(Namespace = "http://schema.company.com/messages/", Order = 0)] 
    public ActualProductRq_Type inquiry; 

    public GetReportRequest() 
    { 
    } 

    public GetReportRequest(ActualProductRq_Type inquiry) 
    { 
    this.inquiry = inquiry; 
    } 
} 

[GeneratedCode("System.ServiceModel", "3.0.0.0")] 
[ServiceContract(Namespace = "http://services.company.com/ActualProduct/v1.0", ConfigurationName = "ActualProduct.IActualProductSvc")] 
public interface IActualProductSvc 
{ 
    // CODEGEN: Generating message contract since the wrapper namespace (http://schema.company.com/messages/) of message GetReportRequest does not match the default value (http://services.company.com/ActualProduct/v1.0) 
    [OperationContract(Action = "http://schema.company.com/messages/IBasicContractOf_ActualProductRq_Type_ActualProductRs_Type/GetReport", 
    ReplyAction = "http://schema.company.com/messages/IBasicContractOf_ActualProductRq_Type_ActualProductRs_Type/GetReportResponse")] 
    [XmlSerializerFormat()] 
    [ServiceKnownType(typeof (Aggregate))] 
    GetReportResponse GetReport(GetReportRequest request); 

    // CODEGEN: Generating message contract since the wrapper namespace (http://schema.company.com/messages/) of message GetRawReportRequest does not match the default value (http://services.company.com/ActualProduct/v1.0) 
    [OperationContract(
    Action = "http://schema.company.com/messages/IBasicContractOf_ActualProductRq_Type_ActualProductRs_Type/GetRawReport", 
    ReplyAction = "http://schema.company.com/messages/IBasicContractOf_ActualProductRq_Type_ActualProductRs_Type/GetRawReportResponse")] 
    [XmlSerializerFormat()] 
    [ServiceKnownType(typeof (Aggregate))] 
    GetRawReportResponse GetRawReport(GetRawReportRequest request); 

    // CODEGEN: Generating message contract since the wrapper namespace (http://schema.company.com/messages/) of message GetArchiveReportRequest does not match the default value (http://services.company.com/ActualProduct/v1.0) 
    [OperationContract(
    Action = "http://schema.company.com/messages/IBasicContractOf_ActualProductRq_Type_ActualProductRs_Type/GetArchiveReport", 
    ReplyAction = 
     "http://schema.company.com/messages/IBasicContractOf_ActualProductRq_Type_ActualProductRs_Type/GetArchiveReportResponse")] 
    [XmlSerializerFormat()] 
    [ServiceKnownType(typeof (Aggregate))] 
    GetArchiveReportResponse GetArchiveReport(GetArchiveReportRequest request); 
} 

...ラッパーの束を持つ:他のプロジェクトに、このプロジェクトへの氷の参照は、生成されたコードは、追加の(と役に立たない)リクエストとレスポンスの種類がありますこれらのラッパーを生成させないために手で削除することはできませんか?私が求めているのは、すべてのワークフローから共通の契約を抽出しようとする前に、それらが生成されていないということです。異なる名前空間を持つ共通のインタフェースはありません。これらのワークフローを使用している人々は、参照し、手動でReference.csファイルから多くのものを削除します。

私は、Visual StudioでWSDLインポートツールを嫌い:(

答えて

0

あなたは、クライアント側で、あなたのサービス参照を追加したり、設定する場合、非同期メソッドを生成について何かを言及しているチェックボックスがあります。

それがチェックされます場合は、それをオフにしようとすると、これが自動生成されたリクエスト/レスポンス方式を削除するかどうかを確認。

私は解決策は少しかすんで一年以上前に同様の問題があった。あなたのu場合

+0

いいえ、それはチェックされていません:( –

0

あなたは同じ問題を持っていますかse svcutil.exeを使用してプロキシクラスを生成しますか?もしそうなら、これはVS2008の問題ではありません。

この問題は私を驚かせるものではありません。 .NETのGenericsはマクロではありません。 WSDLジェネレータが、ジェネリックサービスコントラクトのインスタンス化に実際のタイプパラメータとして使用されている特定のタイプを調べることを期待しています。私はそれが些細なことであると思う。

この問題の単純なバージョンを作成し、http://connect.microsoft.com/visualstudio/に報告することをお勧めします。クイック検索を行い、まずそれが既に報告されているかどうかを確認します。あなたがそれを報告したら、他の人がそれに投票できるように、レポートのURLを質問の編集として投稿してください。

+0

私は道を見つけました、私は私の最初の投稿を編集しています...私は考えていない* –

関連する問題