je générer deux contrats de référence de service pour les fichiers .asmx dans Visual Studio 2010.Visual Studio génère un de mes références de service avec Runtime.Serialization, mais les autres génèrent avec ServiceModel
J'ai créé les deux références de service dans un mode identique. Je fais un clic droit sur 'Références de service' -> 'Ajouter une référence de service ..' -> 'Découvrir' -> Renommer l'espace de noms -> OK.
Ceci est le plus haut sommet code généré automatiquement à partir References.cs pour le service correctement généré:
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 {
Ceci est le code pour le service mal généré:
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 {
Il est clair WorkflowServicesProxy utilise System.Runtime.Serialization où ComponentServicesProxy utilise System.ServiceModel. Je ne sais pas ce qui déclenche la génération de ma deuxième référence de service à l'aide de System.Runtime.Serialization. Est-ce que quelqu'un sait ce qui pourrait causer cela? Ma classe OrderDto n'a pas le DataContractAttribute, cependant, il ne possède d'autres attributs:
[Serializable]
[XmlRoot("Order"), SoapType("Order")]
public class OrderDto : IDto
Cette référence de service a été correctement avant la génération de code. Il semble que, entre deux builds, il a changé.
déclarations pour mes deux services sont identiques:
[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
configurations de référence de service sont identiques:
Mise à jour: Alors que j'ai essayé la réponse proposée sans succès, j'ai appris des informations. Si je supprime tout le code de mon fichier asmx et recrée la référence du service, il revient à ServiceModel. Donc, il y a quelque chose dans le code lui-même.
Cela a sonné, mais je ne vois aucune différence lorsque vous suivez vos instructions. J'ai tenté de réutiliser tous les assemblages sauf CableSolve.Orders, mais le même fichier references.cs a été généré.Puis j'ai réessayé après avoir supprimé System.Runtime.Serialization de mon projet, mais toujours la même chose. Je vais certainement garder cela à l'esprit, cependant, je suppose que vous avez raison. –
Donc, c'est clair que vous avez raison, mais je me bats encore. Si je simplifie mon service Web à une seule méthode, je suis en mesure de contrôler l'introduction de Runtime.Serialization en référençant/supprimant la référence à mon objet DTO. Cependant, votre solution de suggestion n'affecte rien. Je vais continuer à bricoler avec ça. –
Si vous n'utilisez pas une classe commune qui est sérialisable alors (je pense) vous devez toujours marquer n'importe quel DTO comme 'DataContract's afin qu'ils puissent être envoyés sur le fil correctement. –