2011-10-27 70 views
0

我是開發Web服務和客戶端服務器應用程序的新手,我在理解如何從c#web服務生成WSDL文件時遇到麻煩。 我需要WSDL文件才能生成代理類並將其引用到通信客戶端。如何從Remoting服務器生成WSDL文件?

class my_server 
{ 
    private static HttpChannel channel; 
    private static int port = 3000; 
    private static string serverUri = "myservice"; 

    static void Main(string[] args) 
    { 

     Console.WriteLine("Sample server"); 
     StartSoapServer(port); 
     Console.ReadLine(); 

     StopSoapServer(); 
    } 
    private static bool Start(int p) 
    { 
     try 
     { 
      port = p; 
      channel = new HttpChannel(port); 
      ChannelServices.RegisterChannel(channel, false); 
      RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off; 
      RemotingConfiguration.RegisterWellKnownServiceType(typeof(server), serverUri, WellKnownObjectMode.Singleton); 
      IServerChannelSink sinkChain = channel.ChannelSinkChain; 

      Console.WriteLine("server created"); 
     } 
     catch (Exception e) 
     { 

      return false; 
     } 
     return true; 
    } 

    private static void Stop() 
    { 
     string[] urls = channel.GetUrlsForUri(serverUri); 
     if (urls.Length > 0) 
     { 
      string objectUrl = urls[0]; 
      string objectUri; 
      string channelUri = channel.Parse(objectUrl, out objectUri); 
      ChannelServices.UnregisterChannel(channel); 
      Console.WriteLine("Server stopped"); 
     } 
    } 

    public class server : MarshalByRefObject 
    { 
     public server() 
     { 
     } 

     public override object InitializeLifetimeService() 
     { 
      return null; 
     } 
     public bool initialise() 
     { 
      Console.WriteLine("initialise()"); 
      return true; 
     } 
     public bool ping() 
     { 
      Console.WriteLine("ping"); 
      return true; 
     } 
    } 
} 

顯然,服務器的創建,直到它停止巋然不動......然而,隨着風暴(http://storm.codeplex.com/)進行測試時,它:通過添加http://localhost:3000/myserviceuri失敗......怎麼回事我可以檢查服務的工作原理,沒有實施客戶?我怎樣才能從這個服務器生成WSDL文件? 我試圖使用http://wsdlgenerator.codeplex.com/,但顯然它只適用於WCF服務...

+0

服務是否是.asmx Web服務? –

+0

@Alex Mendez它應該是一個遠程API ..使用System.Remoting .. – agatha

+0

所以你不能期望得到一個WSDL,如果它不是一個Web服務。 – Seb

回答

1

就我而言,您可以使用wsdl.exe爲.net中的.svc.asmx服務生成wsdl。對於遠程處理,這就是microsoft所說的「Remoting對象可以提供描述對象及其方法的WSDL(參見Web服務描述語言(WSDL)1.1)文件,任何可以讀取和生成對應於WSDL文件可以調用這個對象並使用SOAP與它進行通信.NET Remoting Server對象可以使用.NET SDK附帶的SOAPSUDS.EXE工具來生成可用作元數據的WSDL文件當組織想要提供任何客戶可以訪問和使用的公共服務。「

+0

..我會檢查這...看起來不像我發現的.. – agatha

+0

它看起來像這就是我正在尋找...我一直在尋找wsdl世代的錯誤工具..謝謝 – agatha

0

您正在啓動遠程服務器而不是Web服務。這可能是你的觀點。 Alex Mendez指出,你的項目輸出應該是.asmx。你關注這個procedure嗎?

+0

我遵循已經有效的模板..有服務器遵循這個簡單的模板和關聯的客戶端。這些客戶端使用從WSDL生成的代理類作爲參考...並且我無法找到任何與此相關的任何內容.. – agatha

+0

另一種方法是使用System.Remoting創建客戶端,但我不會遵循該模板。 .. – agatha

1

您正在使用.NET Remoting,它早已不贊成使用WCF。所有新的Web服務和客戶端開發都應該使用WCF。