Frage

Ich habe eine kleine C # Form-Anwendung entwickelt, die einen Web-Service aufruft. Alles funktioniert gut, aber ich brauche Zustand zu halten und zu tun, dass ich brauche eine Cookie zu verwenden, wenn ich mich nicht täuscht.

habe ich den Dienstverweis mit dem „Add Service Reference“ Menü meines Projektes und alles funktionierte gut. Aber ich weiß nicht, wie ein Cookie auf dem Client erstellt hinzuzufügen.

Ich fand einige Beispiele, die Proben, wie zeigten:

serviceClient.CookieContainer=new CookieContainer()

, aber dies ist nicht der Fall. Mein Service Client nicht über eine solche Eigenschaft. Ich verklagt Visual Studio 2010 Beta by the way.

Vielen Dank im Voraus!

Dies ist die Folge Servicereference (die automatisch erstellt wurde):

//------------------------------------------------------------------------------

// // Dieser Code wurde von einem Werkzeug erzeugt. // Runtime Version: 4.0.30128.1 // // Änderungen an diese Datei möglicherweise falsches Verhalten führen und gehen verloren, wenn // Der Code wird regeneriert. // // ------------------------------------------------ ------------------------------

Namespace 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;
    }
}

}

War es hilfreich?

Lösung

Dieser Service Referenz in erstellt mit WCF und WCF ist unabhängig von dem tatsächlichen Medium der Kommunikation, dass Mittel dieser Dienste verwenden entweder webservice Mittel oder remoting oder MSMQ. Und Remoting- und MSMQ kein Konzept von Cookies hat.

Besser Ihre Web-Service-Referenz verwendet WSDL.exe erstellen und die resultierende Klasse in Ihrem Projekt hinzufügen. Ich habe die gleiche Sache.

Andere Tipps

Warum zurück wechseln alte Technologie, wenn Sie nur Cookies aktivieren auf die Bindung?

http://megakemp.wordpress.com/2009/02/ 06 / Verwaltung-shared-Cookies-in-wcf /

Zitat: Wenn eine XML-Webdienstmethode verwendet Sitzungszustand, dann wird ein Cookie in der Antwort-Header an den XML-Web-Service-Client zurückgeführt, die eindeutig identifiziert die Sitzung für diesen XML-Web-Service-Client. Damit einen XML-Webdienst Sitzungsstatus für einen Kunden zu erhalten, muss der Kunde speichert das Cookie.

Weitere Informationen: http: //msdn.microsoft.com/en-us/library/system.web.services.protocols.httpwebclientprotocol.cookiecontainer.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top