3

VisualStudio2010で.asmxファイルの2つのサービス参照コントラクトを生成しています。

両方のサービス参照を同じ方法で作成しました。「サービス参照」->「サービス参照の追加」を右クリックします。「->「検出」->名前空間の名前変更->「OK」。

これは、適切に生成されたサービスのReferences.csから最も自動生成されたコードです。

namespace CableSolve.Web.Api.Tests.ComponentServicesProxy {
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    [System.ServiceModel.ServiceContractAttribute(Namespace="http://www.cormant.com/cswebapi", ConfigurationName="ComponentServicesProxy.ComponentServicesSoap")]
    public interface ComponentServicesSoap {

これは、不適切に生成されたサービスのコードです。

namespace CableSolve.Web.Api.Tests.WorkflowServicesProxy {
    using System.Runtime.Serialization;
    using System;
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
    [System.Runtime.Serialization.DataContractAttribute(Name="OrderDto", Namespace="http://www.cormant.com/cswebapi")]
    [System.SerializableAttribute()]
    public partial class OrderDto : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {

WorkflowServicesProxyがSystem.Runtime.Serializationを使用しているのに対し、ComponentServicesProxyはSystem.ServiceModelを使用していることは明らかです。

System.Runtime.Serializationを使用して2番目のサービス参照が生成されるトリガーが何であるかわかりません。誰かがこれを引き起こす原因を知っていますか?私のOrderDtoクラスにはDataContractAttributeがありませんが、他の属性があります。

[Serializable]
[XmlRoot("Order"), SoapType("Order")]
public class OrderDto : IDto

このサービスリファレンスは、以前は適切にコードを生成していました。2つのビルド間でシフトしたようです。

私の両方のサービスの宣言は同じです:

[WebService(Namespace = "http://www.cormant.com/cswebapi")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class WorkflowServices : WebService

[WebService(Namespace = "http://www.cormant.com/cswebapi")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class ComponentServices : WebService

サービス参照構成は同じです。

ここに画像の説明を入力してください

更新:提案された答えを試しても成功しませんでしたが、いくつかの情報を学びました。asmxファイルからすべてのコードを削除してサービス参照を再生成すると、ServiceModelにスワップバックされます。したがって、コード自体に何かがあります。

4

1 に答える 1

3

あなたは自分の質問に部分的に答えました

OrderDtoクラスにDataContractAttributeがありません

OrderDTOこれは、アセンブリ内に存在しCableSolve.Orders、クライアントとサーバーの両方がそのアセンブリを共有していることに賭けているという事実と組み合わされています。

これは(技術的には)既知のタイプであり、データコントラクトとして明示的にマークされていないため、コードジェネレーターはDLLの参照を使用Runtime.Serializationし、の代わりにオブジェクトのシリアル化と転送に使用しますServiceModel

ここに画像の説明を入力してください

「解決策」として「すべて再利用」から他のオプションに変更し、参照されている共通アセンブリのチェックボックスを除くすべてのチェックボックスをオンにします。

于 2012-09-18T16:10:44.060 に答える