我有一个WCF服务,假设它的程序集名为A,它托管在IIS中。这个WCF服务引用了另一个程序集B,B需要访问A程序集的Assembly对象。
原因:我想通过额外的契约和默认实现来扩展现有的WCF服务,该实现可以返回WCF服务程序集的文件版本。
请看我的代码:
程序集A(WCF服务):
web.config:在地址“B”下添加了一个新的终结点,除了现有的2个终结点。
现有实现方式:现在从程序集B扩展‘Implementation’。
原因:我想通过额外的契约和默认实现来扩展现有的WCF服务,该实现可以返回WCF服务程序集的文件版本。
请看我的代码:
程序集A(WCF服务):
web.config:在地址“B”下添加了一个新的终结点,除了现有的2个终结点。
<configuration>
<system.serviceModel>
<services>
<service name="ExistingServiceHandler">
<endpoint address="mex" kind="mexEndpoint"/>
<endpoint address="" binding="basicHttpBinding" contract="IExistingContract"/>
<endpoint address="B" binding="basicHttpBinding" contract="AssemblyB.IServiceContract"/>
</service>
...
现有实现方式:现在从程序集B扩展‘Implementation’。
public class ExistingServiceHandler : Implementation, IExistingContract
{
// Whatever methods are implemented here
}
汇编B(C#类库):
[ServiceContract]
public interface IServiceContract
{
[OperationContract]
string ServiceVersion();
}
public class Implementation : IServiceContract
{
public string ServiceVersion()
{
string assemblyLocation = Assembly.GetEntryAssembly().Location;
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assemblyLocation);
string fileVersion = fvi.FileVersion;
return fileVersion;
}
}
我已经尝试了以下内容(在汇编B中),但是它们都没有返回正确的汇编代码:
Assembly.GetEntryAssembly(); // returns NULL
Assembly.GetExecutingAssembly(); // returns assembly B
Assembly.GetCallingAssembly(); // returns System.ServiceModel
那么,我该如何获取程序集'A'(WCF服务)的Assembly?
注意:
- 我希望尽可能少地使用来自程序集B的契约+实现。这意味着我不想修改现有的服务实现,除了让类扩展我的新契约的默认实现(程序集B中的实现)。
- 谢谢!
var assemblyLocation = this.GetType().Assembly.Location
吗? - Kris Vandermotten