Search code examples
c#wcfweb-servicesoperation-contract

WCF wrapper for 3rd party web service - fire and forget [OperationContract(IsOneWay = true)]


I have created a WCF service which is a wrapper for a third party web service adding some additional functionality. The issue I have is that within my methods I want to call methods in the 3rd party web service but I don't want to wait for a response (the web service is very slow) on these methods. I have tried using [OperationContract(IsOneWay = true)] on my method but get the following error:

System.InvalidOperationException: The OperationContractAttribute declared on method 'MyMethod' in type 'MyService.MyService'is invalid. OperationContractAttributes are only valid on methods that are declared in a type that has ServiceContractAttribute. Either add ServiceContractAttribute to type 'MyService.MyService' or remove OperationContractAttribute from method 'MyMethod'.

Using [OperationContract(IsOneWay = true)] on methods which don't call the 3rd party web service works fine. Is there a way to do this?

This is the approach I am taking:

public string MyPublicMethod()
{
     //do some stuff

    SomeParams sp = new SomeParams{p1 = "A", P2 = "B"};
    //don't want to wait for this
    MyMethod(sp);

   // do some more stuff

}

[OperationContract(IsOneWay = true)]    
private void MyMethod(SomeParams someParams)
{
     //3rd party service
     WebInterop wisc = new WebInterop();
     var results = (XmlElement)wisc.Search(someParams);

     // do some processing on results


}

Solution

  • Did you have a look at the following? http://msdn.microsoft.com/en-us/library/ms731177.aspx#Y574

    and http://blogs.msdn.com/b/rjacobs/archive/2011/06/30/how-to-implement-a-wcf-asynchronous-service-operation-with-task-lt-t-gt.aspx