M
Mini-Tools Timm
I have a web service question that has stumped me and the experts I've
consulted thus far. Here is my challenge:
When a client connects to a C# web service, how can it bind to a specific
DLL in the web service "bin" folder?
The gritty details… I have a shared assembly (shared.dll) that is referenced
both by a C# WinForms client (client.exe) and a C# Web Service (service.dll).
When I upload the service to the Web, naturally both service.dll and
shared.dll are uploaded to the "bin" folder. Defined in service.dll is a
class called "DataService" that provides the web service methods I need. To
access this web service, client.exe uses code in shared.dll to construct and
use a DataService object. Therefore, the following proxy class is generated
in Reference.cs for shared.dll:
public partial class DataService :
System.Web.Services.Protocols.SoapHttpClientProtocol
The problem occurs when I attempt to execute a method on the DataService
object from client.exe. It throws the following exception:
The type 'MyNamespace.DataService' is ambiguous:
it could come from assembly '\bin\service.dll'
or from assembly '\bin\shared.dll'.
Please specify the assembly explicitly in the type name.
I understand the ambiguity. There is the proxy definition for DataService
in shared.dll (that inherits from SoapHttpClientProtocol). Then there's the
full class definition of DataService in service.dll. The web service doesn't
know which to choose and throws an exception.
My question is, how can I resolve this ambiguity? How do I explicitly tell
the web service to use the DataService definition in service.dll? The
DataService.asmx file only has a Class attribute, but nowhere to specify a
specific assembly.
consulted thus far. Here is my challenge:
When a client connects to a C# web service, how can it bind to a specific
DLL in the web service "bin" folder?
The gritty details… I have a shared assembly (shared.dll) that is referenced
both by a C# WinForms client (client.exe) and a C# Web Service (service.dll).
When I upload the service to the Web, naturally both service.dll and
shared.dll are uploaded to the "bin" folder. Defined in service.dll is a
class called "DataService" that provides the web service methods I need. To
access this web service, client.exe uses code in shared.dll to construct and
use a DataService object. Therefore, the following proxy class is generated
in Reference.cs for shared.dll:
public partial class DataService :
System.Web.Services.Protocols.SoapHttpClientProtocol
The problem occurs when I attempt to execute a method on the DataService
object from client.exe. It throws the following exception:
The type 'MyNamespace.DataService' is ambiguous:
it could come from assembly '\bin\service.dll'
or from assembly '\bin\shared.dll'.
Please specify the assembly explicitly in the type name.
I understand the ambiguity. There is the proxy definition for DataService
in shared.dll (that inherits from SoapHttpClientProtocol). Then there's the
full class definition of DataService in service.dll. The web service doesn't
know which to choose and throws an exception.
My question is, how can I resolve this ambiguity? How do I explicitly tell
the web service to use the DataService definition in service.dll? The
DataService.asmx file only has a Class attribute, but nowhere to specify a
specific assembly.