开发者

F# WSDL code generation

开发者 https://www.devze.com 2023-01-28 00:50 出处:网络
I\'m using VS.NET 2010 integrated shell with F# and I\'m trying to consume a soap web service... How do I go about generating F# source? I tried

I'm using VS.NET 2010 integrated shell with F# and I'm trying to consume a soap web service... How do I go about generating F# source? I tried

wsdl l:"C:\Program Files (x86)\FSharpPowerPack-2.0.0.0\bin\FSharp.Compiler.CodeDom.dll" http://localhost/?wsdl

Along with

wsdl /language:"Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider, Microsoft.FSharp.Compiler.CodeDom, Version=1.9.2.9, Culture=neutral, PublicKeyToken=a19089b1c74d0809"

However I can't seem to get the /language switch to work.

EDIT:

taspeotis' answer got me going... This generated F# source for the web service:

gacutil -i "C:\Program Files (x86)\FSharpPowerPack-2.0.0.0\bin\FSharp.PowerPack.dll"
svcutil /language:"Microsoft.FSharp.Compiler.Co开发者_开发问答deDom.FSharpCodeProvider, FSharp.Compiler.CodeDom, Version=2.0.0.0, Culture=neutral, PublicKeyToken=a19089b1c74d0809" http://localhost/?wsdl


Have you added FSharp.Compiler.CodeDom.dll to the GAC? Use gacutil.exe to do this.

3rd party edit

Here an example gacutil.exe /l System.XML.Linq to list certain assemblies. Besides to FSharp.Compiler.CodeDom (source) an alternative might be the FSharp.Data library

Quote from jizugu: This generated F# source for the web service:

gacutil -i 
   "C:\Program Files (x86)\FSharpPowerPack-2.0.0.0\bin\FSharp.PowerPack.dll"

svcutil 
  /language:"Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider  
        ,FSharp.Compiler.CodeDom, Version=2.0.0.0, Culture=neutral
        ,PublicKeyToken=a19089b1c74d0809" http://localhost/?wsdl


This doesn't answer your question, but you may have better luck generating C#, compiling that C# into a library DLL, and referencing that DLL from your F# code. (The C# compiler csc.exe will be part of your .NET installation.)


I would be surprised if the F# Code DOM provider worked with WSDL. I wrote the initial implementation some time ago while at Microsoft and we got it to work with ASP.NET, but unless it has been improved since then, it probably won't work with WSDL or XSD.

Even for ASP.NET, we had to create a separate class that included some ASP.NET specific "hacks". This was partly because the CodeDOM generated by ASP.NET was invalid (in a way) and because the CodeDOM structure is not quite compatible with F#. If you really need to get this to work, you may have to add similar hacks (by modifying the source from CodePlex)

I tink that a safer approach is to include a small C# library project that generates the reference for you or invoking the C# compiler using csc.exe as Brian suggests.

0

精彩评论

暂无评论...
验证码 换一张
取 消