13

Visual Studio 2010 内の機能を使用して、単純な Windows フォーム アプリケーションに Navision Web サービスを追加してAdd Service Referenceいます。参照は生成されますが、コード内には、コードのコンパイルを停止する重複した定義があります。次に例を示します。

エラー

名前空間 'WindowsFormsApplication1.ServiceReference1' には既に 'Status' C:\Trash\WindowsFormsApplication1\WindowsFormsApplication1\Service References\ServiceReference1\Reference.cs の定義が含まれています

そして中Reference.csに私が持っている

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1015")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:microsoft-dynamics-schemas/page/salesheaderpage")]
public enum Status {

    /// <remarks/>
    Open,

    /// <remarks/>
    Released,

    /// <remarks/>
    Pending_Approval,

    /// <remarks/>
    Pending_Prepayment,
}

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="Status", Namespace="urn:microsoft-dynamics-schemas/page/salesheaderpage")]
public enum Status : int {

    [System.Runtime.Serialization.EnumMemberAttribute()]
    Open = 0,

    [System.Runtime.Serialization.EnumMemberAttribute()]
    Released = 1,

    [System.Runtime.Serialization.EnumMemberAttribute()]
    Pending_Approval = 2,

    [System.Runtime.Serialization.EnumMemberAttribute()]
    Pending_Prepayment = 3,
}

すでにチェックを外そうとしましReuse types in referenced assembliesたが、どちらの場合でも重複した定義が生成されます。

何か案は?

編集: ページは、標準テーブル 36 (販売ヘッダー) に接続されたカスタム ページです。

4

6 に答える 6

8

問題は、シリアライゼーションが 2 回発生しているようです。

//Xml Serializer
[System.Xml.Serialization.XmlTypeAttribute(...

//DataContract Serializer
[System.Runtime.Serialization.DataContractAttribute(...

サーバー側の問題がないと仮定します。

  • 最初に確認することは、同じ名前の列挙型がローカルにないことです。これは、型の再利用を妨げることがよくあるためです。

  • また、使用Add Web Referenceすると、作業コードが提供されるはずです。

  • 他のポイントで問題が解決しなかった場合 (または、動作するコードが生成されたとしても役に立たない場合)、次にsvcutil、特定のシリアライザーを使用してプロキシ クラスを手動で構築することを試みます。Dynamics サービスは XML サービスであるべきなので、/serializer:XmlSerializer(編集: コマンド ライン パラメーターの入力を間違えました!)

コマンドは次のようになります。

svcutil <ServiceURL> /Language:CS /target:Code 
/out:MyServiceProxy.cs /config:MyServiceProxy.config /serializer:XmlSerializer

ツールの既定の場所は、ツールのMSDN リファレンス (フレームワーク バージョン 4.0)%ProgramFiles%\Microsoft SDKs\Windows\v6.0\Binに従っている必要があります。

于 2013-11-22T10:31:06.163 に答える
6

これが私のためにそれを修正したものです:

  1. 通常どおりサービス参照を追加します
  2. 「ソリューションエクスプローラー」で、「すべてのファイルを表示」アイコンの切り替えを選択します
  3. 追加したサービス参照の Reference.svcmap を開きます
  4. 行を変更する<Serializer>Auto</Serializer>
  5. <Serializer>XmlSerializer</Serializer>
  6. サービス参照を更新する

Visual Studio の一部のバージョンでは、「サービス参照の追加」機能が、XmlSerializer または DataContractSerializer を使用するかどうかを自動的に判断できないようです。したがって、上記は XmlSerializer の使用を強制します。

于 2015-08-25T13:14:29.813 に答える
2

この質問にはしばらく時間がかかりましたが、他の誰かが同様の問題に遭遇した場合に備えて:

VS プロジェクトに ServiceReference を追加するときは、公開した Web サービスに関連する正確な URL を使用することが重要です。

次のように入力して、すべての Web サービス オブジェクトを検出しないでください。

http://navserver.domain.com:7047/DynamicsNAV/WS/services

次に、リストから Web サービス オブジェクトを選択します。

代わりに、具体的には次のように Web サービス オブジェクトを参照します。

http://navserver.domain.com:7047/DynamicsNAV/WS/%PercentEncodedCompanyNameHere%/page/salesheaderpage

これにより、余分な参照を削除する手間が省けます。

プロジェクトに Web 参照を追加する場合、これは問題ではありません。これは、ServiceReferences に固有のものです。

于 2014-02-09T15:52:56.393 に答える
0

変更を元に戻すのが簡単になるように、常にサービス参照を独自の DLL に保持することをお勧めします。「svcutil」は現在「古い」ものであり、混乱することがあります。

これが私の話です...

私はこのサービス参照を何年も使用しており、ほとんど問題なく更新しています。Binaryの型が必要だったSystem.Data.Linqので、そのアセンブリを確認しました。

ここに画像の説明を入力

どういうわけか完全に混乱して、すべてReference1.csを複製した追加ファイルを作成しましたReference.cs(+ のために新しいファイルであることがわかります)。

ここに画像の説明を入力

Undo pending changes元に戻そうとしても、余分なファイルは + 記号なしで残っていましたが、それでも重複がありました。

ここに画像の説明を入力

結局、参照を完全に削除して再作成する必要がありました。

前述したように、サービス参照用に別のプロジェクト/DLL を作成する方がはるかに安全です。そのため、問題が発生した場合 (まれではありますが実際に発生します)、より簡単に修正できます。

于 2016-09-22T20:30:29.707 に答える
0

これは誰かに役立つかもしれません。postcodeanywhere サービスをアプリケーションに追加していましたが、同じ種類のエラーが発生し続けました。IIS アプリケーション プールを 32 ビットを許可するように変更したところ、すぐに機能し始めました。なぜこれが当てはまるのかわかりませんが、私にとってはうまくいきました。

于 2016-08-14T12:47:46.803 に答える