最良の設計は、クラスを作成して WSDL に含めることだと思います。これにより、サービスの説明とともにクラス署名が利用可能になります。これは、言語に関係なく、クライアントがそのタイプのオブジェクトを使用できることを意味します。
このクラスを作成するときは、.Net 組み込みのカスタム タイプなどを使用しないようにしてくださいDataSet
。可能な限り常に基本型を使用するようにしてください。これにより、オブジェクトが簡単にシリアル化および逆シリアル化され、.Net 以外のフレームワークを開発したクライアントによって使用されるようになります。
この質問を確認してください: How to Declare Complex Nested C# Type for Web Service
は、小さなコードと小さなアドバイスも示しています。
さらにサポートが必要な場合はお知らせください。
アップデート
特定の webmethod について、次のデータ セットを返したいとします。
- 学生の名前
- 生年月日
- 学生が現在割り当てられているコースのリスト (名前で表されます)
サービスがどのように署名されるかを見てください。
public class WebService1 : System.Web.Services.WebService
{
public class Course
{
public string Name { get; set; }
}
public class Student
{
public string Name { get; set; }
public DateTime BirthDate { get; set; }
public List<Course> CurrentCourses { get; set; }
}
[WebMethod]
public Student HelloWorld()
{
Student Baxter = new Student();
Baxter.Name = "Baxter";
Baxter.BirthDate = new DateTime(1986, 04, 22);
Baxter.CurrentCourses = new List<Course>();
Baxter.CurrentCourses.Add(new Course() { Name = "SOAP Webservices 101" });
Baxter.CurrentCourses.Add(new Course() { Name = "Mastering C#" });
Baxter.CurrentCourses.Add(new Course() { Name = "Why you (and I) suck at Javascript" });
return Baxter;
}
}
呼び出した後の結果は次のとおりです。
<Student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
<Name>Baxter</Name>
<BirthDate>1986-04-22T00:00:00</BirthDate>
<CurrentCourses>
<Course>
<Name>SOAP Webservices 101</Name>
</Course>
<Course>
<Name>Mastering C#</Name>
</Course>
<Course>
<Name>Why you (and I) suck at Javascript</Name>
</Course>
</CurrentCourses>
</Student>
そして最高なのは、このクラス シグネチャが公開されている (WSDL に含まれている) ため、WSDL を処理するだけで、別のプロジェクトで次のことを実行できることです。
ServiceReference1.WebService1SoapClient SoapClient = new ServiceReference1.WebService1SoapClient();
ServiceReference1.Student IsThisBaxter = SoapClient.HelloWorld();