2011-10-27 42 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。