WCF Client de Service Web à l'aide d'un CookieContainer
J'ai développé un petit C# formulaire de demande qui appelle un service web.
Tout fonctionne très bien, mais j'ai besoin de garder de l'état, et pour ce faire j'ai besoin d'utiliser un CookieContainer si je ne me trompe pas.
J'ai créé le Service de Référence en utilisant la fonction "Ajouter une Référence de Service" menu de mon projet et tout fonctionnait bien. Mais je ne sais pas comment ajouter un CookieManager sur le client créé.
J'ai trouvé quelques exemples qui montraient des échantillons comme:
serviceClient.CookieContainer=new CookieContainer()
mais ce n'est pas le cas. Mon service client ne dispose pas d'une telle propriété. Je suis ce que la poursuite de Visual Studio 2010 Beta.
Vous en remercie d'avance!
C'est la ServiceReference(qui a été créé automatiquement):
//------------------------------------------------------------------------------
//
//Ce code est généré par un outil.
//Version Du Moteur D'Exécution:4.0.30128.1
//
//Modification de ce fichier peut causer un mauvais comportement et seront perdues si
//le code est régénéré.
//
//------------------------------------------------------------------------------
espace de noms WSClient.SecurityServiceReference {
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://max/", ConfigurationName="SecurityServiceReference.SecurityService")]
public interface SecurityService {
//CODEGEN: Generating message contract since element name return from namespace is not marked nillable
[System.ServiceModel.OperationContractAttribute(Action="http://max/SecurityService/nextValRequest", ReplyAction="http://max/SecurityService/nextValResponse")]
[System.ServiceModel.TransactionFlowAttribute(System.ServiceModel.TransactionFlowOption.Allowed)]
WSClient.SecurityServiceReference.nextValResponse nextVal(WSClient.SecurityServiceReference.nextValRequest request);
//CODEGEN: Generating message contract since element name return from namespace is not marked nillable
[System.ServiceModel.OperationContractAttribute(Action="http://max/SecurityService/reportSessionIDRequest", ReplyAction="http://max/SecurityService/reportSessionIDResponse")]
[System.ServiceModel.TransactionFlowAttribute(System.ServiceModel.TransactionFlowOption.Allowed)]
WSClient.SecurityServiceReference.reportSessionIDResponse reportSessionID(WSClient.SecurityServiceReference.reportSessionIDRequest request);
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
public partial class nextValRequest {
[System.ServiceModel.MessageBodyMemberAttribute(Name="nextVal", Namespace="http://max/", Order=0)]
public WSClient.SecurityServiceReference.nextValRequestBody Body;
public nextValRequest() {
}
public nextValRequest(WSClient.SecurityServiceReference.nextValRequestBody Body) {
this.Body = Body;
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.Runtime.Serialization.DataContractAttribute()]
public partial class nextValRequestBody {
public nextValRequestBody() {
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
public partial class nextValResponse {
[System.ServiceModel.MessageBodyMemberAttribute(Name="nextValResponse", Namespace="http://max/", Order=0)]
public WSClient.SecurityServiceReference.nextValResponseBody Body;
public nextValResponse() {
}
public nextValResponse(WSClient.SecurityServiceReference.nextValResponseBody Body) {
this.Body = Body;
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.Runtime.Serialization.DataContractAttribute(Namespace="")]
public partial class nextValResponseBody {
[System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=0)]
public string @return;
public nextValResponseBody() {
}
public nextValResponseBody(string @return) {
this.@return = @return;
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
public partial class reportSessionIDRequest {
[System.ServiceModel.MessageBodyMemberAttribute(Name="reportSessionID", Namespace="http://max/", Order=0)]
public WSClient.SecurityServiceReference.reportSessionIDRequestBody Body;
public reportSessionIDRequest() {
}
public reportSessionIDRequest(WSClient.SecurityServiceReference.reportSessionIDRequestBody Body) {
this.Body = Body;
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.Runtime.Serialization.DataContractAttribute()]
public partial class reportSessionIDRequestBody {
public reportSessionIDRequestBody() {
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
public partial class reportSessionIDResponse {
[System.ServiceModel.MessageBodyMemberAttribute(Name="reportSessionIDResponse", Namespace="http://max/", Order=0)]
public WSClient.SecurityServiceReference.reportSessionIDResponseBody Body;
public reportSessionIDResponse() {
}
public reportSessionIDResponse(WSClient.SecurityServiceReference.reportSessionIDResponseBody Body) {
this.Body = Body;
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.Runtime.Serialization.DataContractAttribute(Namespace="")]
public partial class reportSessionIDResponseBody {
[System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=0)]
public string @return;
public reportSessionIDResponseBody() {
}
public reportSessionIDResponseBody(string @return) {
this.@return = @return;
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public interface SecurityServiceChannel : WSClient.SecurityServiceReference.SecurityService, System.ServiceModel.IClientChannel {
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class SecurityServiceClient : System.ServiceModel.ClientBase<WSClient.SecurityServiceReference.SecurityService>, WSClient.SecurityServiceReference.SecurityService {
public SecurityServiceClient() {
}
public SecurityServiceClient(string endpointConfigurationName) :
base(endpointConfigurationName) {
}
public SecurityServiceClient(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress) {
}
public SecurityServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress) {
}
public SecurityServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress) {
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
WSClient.SecurityServiceReference.nextValResponse WSClient.SecurityServiceReference.SecurityService.nextVal(WSClient.SecurityServiceReference.nextValRequest request) {
return base.Channel.nextVal(request);
}
public string nextVal() {
WSClient.SecurityServiceReference.nextValRequest inValue = new WSClient.SecurityServiceReference.nextValRequest();
inValue.Body = new WSClient.SecurityServiceReference.nextValRequestBody();
WSClient.SecurityServiceReference.nextValResponse retVal = ((WSClient.SecurityServiceReference.SecurityService)(this)).nextVal(inValue);
return retVal.Body.@return;
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
WSClient.SecurityServiceReference.reportSessionIDResponse WSClient.SecurityServiceReference.SecurityService.reportSessionID(WSClient.SecurityServiceReference.reportSessionIDRequest request) {
return base.Channel.reportSessionID(request);
}
public string reportSessionID() {
WSClient.SecurityServiceReference.reportSessionIDRequest inValue = new WSClient.SecurityServiceReference.reportSessionIDRequest();
inValue.Body = new WSClient.SecurityServiceReference.reportSessionIDRequestBody();
WSClient.SecurityServiceReference.reportSessionIDResponse retVal = ((WSClient.SecurityServiceReference.SecurityService)(this)).reportSessionID(inValue);
return retVal.Body.@return;
}
}
}
OriginalL'auteur DaTroop | 2010-05-26
Vous devez vous connecter pour publier un commentaire.
Ce service de référence en créé à l'aide de la WCF et WCF est indépendante du support de communication qui signifie que ces services peuvent être utilisés soit à l'aide d'un webservice ou remoting ou MSMQ. Et l'accès distant et de MSMQ ne dispose pas d'un concept de Cookies.
Mieux créer votre référence de service web à l'aide de WSDL.exe et d'ajouter la classe résultante dans votre projet. J'ai fait la même chose.
-1: Mauvaise suggestion. Vous êtes ce qui suggère qu'il aller retour vers le passé pour empêcher que de l'apprentissage de la présente.
OriginalL'auteur Rajpreet
Pourquoi revenir à l'ancienne technologie, quand vous pouvez simplement activer les cookies sur la liaison?
http://megakemp.wordpress.com/2009/02/06/managing-shared-cookies-in-wcf/
Lien du message court (il fonctionne): liaison.AllowCookies = true; using(var webServiceProxy = new ReportExecutionServiceSoapClient(liaison, point de terminaison)){}
Un mot d'avertissement.. la solution de gestion centralisée dans le lien prend une vue simplifiée de cookies et ne répond à aucune des 3 cookie Rfc (2109, 2965, 6265) il est donc important de comprendre les exigences du serveur auquel vous vous connectez. Par exemple j'ai vu un serveur qui envoie de multiples séparées par des virgules, des cookies par 2109 mais ne comprend celles qu'il veut vous mettre à jour.
OriginalL'auteur t0PPy
Cité:
Si une méthode de service Web XML utilise l'état de session, un cookie est transmis dans les en-têtes de réponse pour le client de service Web XML qui identifie la session pour que le client de service Web XML. Pour un service Web XML à maintenir l'état de session pour un client, le client doit stocker le cookie.
Plus d'informations: http://msdn.microsoft.com/en-us/library/system.web.services.protocols.httpwebclientprotocol.cookiecontainer.aspx
OriginalL'auteur riffnl