我最近圖書館負責人:Fody。據我所知,它可以鉤入構建過程並將IL注入程序集。我不完全確定它是如何工作的,但是可以通過搜索IL來找到所有具有ExposeToWeb
屬性的方法,並使用它來將WCF服務的合約發送到程序集中。
但是另一方面,如果您已經爲該類添加屬性,爲什麼不直接添加正確的WFC屬性開始,然後使用SvcUtil
在後期構建中生成合約?
編輯: 這裏是你如何可以使用一個例子svcutil
:
C#:
[ServiceContract]
public interface IRainfallMonitor
{
[OperationContract]
void RecordRainfall(string county, float rainfallInches);
}
public class RainfallMonitor : IRainfallMonitor
{
public void RecordRainfall(string county, float rainfallInches)
{
// code
}
}
後生成的PowerShell:
$svcutil = "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\SvcUtil.exe"
$csc = "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe"
$assembly = "bin/debug/ProjectWithoutWCF.dll"
$service = "ProjectWithoutWCF.RainfallMonitor"
$outputns = "ProjectWithoutWCF.RainfallMonitor.Service"
$outputdir = "bin/debug"
md svcutil_tmp
cd svcutil_tmp
& $svcutil /serviceName:"$service" "../$assembly"
& $svcutil *.wsdl *.xsd /importxmltypes /out:"output.cs" /n:"*,$outputns"
& $csc /target:library /out:$outputns.dll "output.cs"
cp "$outputns.dll" "../$outputdir"
cp output.config "../$outputdir/$outputns.dll.config"
cd ..
rm -r .\svcutil_tmp
,您將需要在這樣的事情你項目配置:
<system.serviceModel>
<services>
<service name="ProjectWithoutWCF.RainfallMonitor" >
<endpoint address="" binding="basicHttpBinding" contract="ProjectWithoutWCF.IRainfallMonitor">
</endpoint>
</service>
</services>
</system.serviceModel>
它有點煩瑣,你很可能需要對腳本和配置進行一些調整。但結果是你有一個ProjectWithoutWCF.RainfallMonitor.Service.dll
文件與WCF服務合同。
我可以想到兩個潛在的問題:1)方法重載不能映射到1個多個OperationContracts(名稱必須不同)。 2)API中使用的所有複雜類型必須是可序列化的(例如[DataContracts]),因此API作者必須知道他們的API將作爲WCF服務公開。 – nodots