Search code examples
.netwcfconfigurationworkflowwce

Workflow Services: The contract name could not be found in the list of contracts implemented by the service


I can't for the life of me work this one out. I have workflow service, declared thus:

<WorkflowService mc:Ignorable="sap sap2010 sads" p1:TextExpression.Namespaces="{x:Reference __ReferenceID79}" p1:TextExpression.References="{x:Reference __ReferenceID80}" ConfigurationName="MyWorkflowService" sap2010:ExpressionActivityEditor.ExpressionActivityEditor="C#" sap2010:WorkflowViewState.IdRef="WorkflowService_1" Name="MyWorkflowService"

It implements a service contract:

<WorkflowService.ImplementedContracts>
    <x:Type Type="ns:IWorkflowService" />
  </WorkflowService.ImplementedContracts>

I'm trying to enable a workflow control endpoint, so that I can resume suspended workflows from a remote client. So I've added the following section into the web.config:

<services>
      <service name="MyWorkflowService">
        <endpoint binding="basicHttpBinding" name="BasicHttpBinding_IWorkflowService" contract="Name.Space.IWorkflowService" />
        <endpoint binding="basicHttpBinding" name="wceEndpoint" address="wce" kind="workflowControlEndpoint" contract="System.ServiceModel.Activities.IWorkflowInstanceManagement" />
      </service>
    </services>

But everytime I visit http://myhost.lan/service/MyWorkflowService.xamlx, I'm receiving this message:

The contract name 'Name.Space.IWorkflowService' could not be found in the list of contracts implemented by the service 'MyWorkflowService'.

My contract looks like this:

[ServiceContract(Name = "IService", Namespace = "http://mycompany/myservice/")]
    public interface IWorkflowService
    {
        [OperationContract]
        int DoStuff(string filePath);

        [OperationContract]
        [FaultContract(typeof(ThingNotFoundException))]
        void Take(string baseDirectory, int id);
    }

Any help would be much appreciated!


Solution

  • Reflector revealed the answer to me. I had been using the wrong contract in the configuration.

    I should have been using:

    <endpoint binding="basicHttpBinding" name="BasicHttpBinding_IWorkflowService" contract="IService" />
    

    I had tried

    http://mycompany/myservice/IService
    

    but not

    IService

    by itself.