Webservice Fragen

21/10/2009 - 13:48 von Tobias | Report spam
Hallo allerseits,

ich habe ein paar Fragen zu Webservices.

Gehen wir davon aus, ich habe folgende Umgebung:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace MyService
{
[ServiceContract]
public interface ICustomService
{
[OperationContract]
CustomType[] getCustomType();
}
}

namespace MyService
{
public class CustomService : ICustomService
{
private CustomType[] ct;

public CustomType[] getCustomType(){
if (ct.Length>100)
throw new Excaption("100 überschritten");
else
return ct;
}
}

namespace MyHost
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("***** MyService Based WCF Host *****");

using (ServiceHost serviceHost = new
ServiceHost(typeof(CustomService)))
{
serviceHost.Open();

Console.WriteLine("The service is read.");
Console.WriteLine("Press the Enter key to terminate
Service.");
Console.ReadLine();
}
}
}
}

//App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="MyService.CustomService"
behaviorConfiguration="MyServiceMEXBehavior" >
<endpoint address=""
binding="basicHttpBinding"
contract="MyService.ICustomService"/>

<!--Enable the MEX endpoint-->
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />

<!--Need to add this so MEX knows the adress of our service-->
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/MyService"/>
</baseAddresses>
</host>
</service>
</services>
<!--A behavior definition for MEX-->
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceMEXBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>

namespace myType
{
public class CustomType
{
public int x { get; private set; }

public CustomType(int X)
{
CustomType.x=X;
}
}
}

// und einem einfachen Client der nur eine ServiceReference auf den Host hat
und dem der CustomType bekannt ist.


Frage 1:
Was muss ich hier àndern, um meinen CustomType über den Webservice an einen
Client übertragen zu können?

Frage 2:
Was muss ich machen, um die Excaption in getCustomType an den Client
weiterleiten zu können?

evtl. kommen noch Fragen dazu ;)
Aber könnt ihr mir vorerst dabei helfen?

MfG,
Tobias
 

Lesen sie die antworten

#1 Roland Liess
22/10/2009 - 16:08 | Warnen spam
Hallo Tobias,


Frage 1:
Was muss ich hier àndern, um meinen CustomType über den Webservice an
einen Client übertragen zu können?


Du mußt CustomType bekannt machen mittels DataContract und die Felder
als DataMember. Die Attribute sind in System.Runtime.Serialization.

using System.Runtime.Serialization

[DataContract]
public class CustomType
{
[DataMember]
public int x { get; private set; }

public CustomType(int X)
{
CustomType.x=X;
}
}

Frage 2:
Was muss ich machen, um die Excaption in getCustomType an den Client
weiterleiten zu können?


FaultException werfen

public CustomType[] getCustomType(){
if (ct.Length>100)
throw new FaultException("100 überschritten");
else
return ct;
}

Am Client dann:

using System.ServiceModel;

...
try {
...
}
catch (FaultException faultEx) {
Console.WriteLine("Es trat in Fehler auf: {0}", faultEx.Reason);
}


evtl. kommen noch Fragen dazu ;)
Aber könnt ihr mir vorerst dabei helfen?



Gruß Roland

Ähnliche fragen