<p>Is there a way when creating web services to specify the types to use? Specifically, I want to be able to use the same type on both the client and server to reduce duplication of code.</p>

<p>Over simplified example:</p>

<pre><code>    public class Name
    {
        public string FirstName {get; set;}
        public string Surname { get; set; }

        public override string ToString()
        {
            return string.Concat(FirstName, " ", Surname);
        }
    }
</code></pre>

<p>I don't want to have recode pieces of functionality in my class. The other thing is that any code that exists that manipulates this class won't work client side as the client side class that is generated would be a different type.</p>

If you want to have a type or structure shared between your web service and your client, add a public struct to your web service project like so:
```
```
public struct Whatever
{
    public string A;
    public int B;
}
```
```
then add a method to your web service that has this struct as its return type:
```
```
[WebMethod]
public Whatever GiveMeWhatever()
{
    Whatever what = new Whatever();
    what.A = "A";
    what.B = 42;
    return what;
}
```
```
After you update your client's web reference, you'll be able to create structs of type Whatever in your client application like so:
```
```
Webreference.Whatever what = new Webreference.Whatever();
what.A = "that works?";
what.B = -1; // FILENOTFOUND
```
```
This technique lets you maintain the definition of any structures you need to pass back and forth in one place (the web service project).