Az SVC technológia kapcsán (ami egyébként kivételesen ötletes) az az érzése lehet az embernek, mintha nem lett volna rá idő rendesen beintegrálni a Visual Studio 2008-ba, ugyanis nincs módunk a kliens stub-ok generálására studióból. Vagy legalábbis én még nem jöttem rá erre. De sebaj, van megoldás. Írni kell két bat filét.
svc.bat
@echo off
echo Starting servicestub generation
cmd /V:ON /C svcgen.bat
svcgen.bat
@echo off
set serviceList=system/system.svc,other/other1.svc,common/common.svc,admin/admin.svc
set serviceHost=http://localhost:3467/services/
set outputDir=.\client\serviceproxy\servicestubs\
set outputConfig=.\..\..\..\services_app.config
set resourceFile=.\..\common\bin\Debug\common.dll
set svcTool="c:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\SvcUtil"
set wsdlPostFix=?WSDL
set commonParams=/noLogo /target:code /l:cs /ser:datacontractserializer /importxmltypes
set cmdLine=%commonParams% /r:%resourceFile% /config:%outputConfig% /d:%outputDir%
del %outputDir%%outputConfig%
del /Q %outputDir%\*.*
set firstrun=true
for %%a in (%serviceList%) do (
echo Processing service: %%a
echo -------------------
rem echo %svcTool% %cmdLine% %serviceHost%%%a%wsdlPostFix%
if "!firstrun!" == "false" (
%svcTool% %cmdLine% /mergeConfig %serviceHost%%%a%wsdlPostFix%
)
if "!firstrun!" == "true" (
%svcTool% %cmdLine% %serviceHost%%%a%wsdlPostFix%
set firstrun=false
)
)
A szolgáltatásokat a serviceList listába kell felvenni, vesszővel elválasztva.
A /r: paraméter arra szolgál, hogy azon osztályok, amik szerepelnek a megadott dll-ben nem kerülnek legenerálásra a kliens oldalon.
Ha igazán széppé akarjuk tenni a megoldást, akkor kell írnunk egy alkalmazást, ami a végeredményül kapott services_app.config fájlt bele tudja illeszteni az app.config fájl megfelelő xpath helyére.