admin管理员组

文章数量:1304969

I'm migrating an old application from Xamarin Android to .NET Maui (v9.0) and I was able to successfully add a WCF Web Service called DataInterface to the project yet I am unable to create a instance of the service to call the various functions of the service. My code is fairly simple:

DataInterfaceWeb.DataInterface myService = new DataInterfaceWeb.DataInterface();

The error is DataInterface does not exist in the namespace. This is how the service is instaniated in Xamarin, has something changed? I've looked all over for a solution and there is nothing out there that shows creating an instance of the WCF Web Service, plenty of examples on how to add one to a project which I was able to do successfully (apparently), but how do I reference it in code? I'm using c# in Visual; Studio 2022.

I'm migrating an old application from Xamarin Android to .NET Maui (v9.0) and I was able to successfully add a WCF Web Service called DataInterface to the project yet I am unable to create a instance of the service to call the various functions of the service. My code is fairly simple:

DataInterfaceWeb.DataInterface myService = new DataInterfaceWeb.DataInterface();

The error is DataInterface does not exist in the namespace. This is how the service is instaniated in Xamarin, has something changed? I've looked all over for a solution and there is nothing out there that shows creating an instance of the WCF Web Service, plenty of examples on how to add one to a project which I was able to do successfully (apparently), but how do I reference it in code? I'm using c# in Visual; Studio 2022.

Share Improve this question edited Feb 3 at 21:48 Prescott Chartier asked Feb 3 at 21:26 Prescott ChartierPrescott Chartier 1,7073 gold badges22 silver badges42 bronze badges 3
  • I haven't done this in years, and it was incredibly painful then, but you should be able to look at the generated code it creates and find the correct namespaces/classes that it uses – Jason Commented Feb 3 at 21:54
  • @Jason I've looked at all the generated code, nothing stansds out. I can see all the references to the functions and procedures contained withing the service, but cannot create an instance of the service in code. – Prescott Chartier Commented Feb 3 at 21:57
  • Did you meet this issue Adding a WCF Connected Service: The target framework '$(TargetFrameworks)' is not supporte – Liqun Shen-MSFT Commented Feb 7 at 6:37
Add a comment  | 

1 Answer 1

Reset to default 1

Using VS 2022's Connected Services feature in Maui to add a connection to a web service is a lot different than what I was acustom to in Xamarin. Using the instructions in this link only gets you partially there. Because I use synchronous calls to the functions in the service, if you follow these instructions to the letter, a lot of the services won't be created in the resulting code files. On this last screen when you click Next, be sure to check the Generate Synchronous Operations otherwise you won't get all the functions in the service.

Once the code files are created to access the service there are two very distinct differences between this and Xamarin's method of instantiating a instance of the service. In Xamarin we did so using this syntax: MyServiceName.TheService myService = new MyServiceName.TheService(); and all was good. But in .NET Maui the service is instantiated like so: MyServiceNameSoapClient myService = new MyServiceNameSoapClient(MyServiceNameSoapClient.EndpointConfiguration.MyServiceSoap);

The MyServiceNameSoapClient.EndpointConfiguration.MyServiceSoap is a reference to an enum created by the tool which you need to use to create the instance so that VS knows that the instance uses the code in the files that were generated by the tool, otherwise you'll get an runtime error when you execute the code. There are two variables in the enum, MyServiceNameSoapClient.EndpointConfiguration.MyServiceSoap and MyServiceNameSoapClient.EndpointConfiguration.MyServiceSoap12. Either one will work. I didn't look into what the difference was between the two.

The other issue I ran into was that some of the functions contained in the service returned a dataset, well the new WCF tool tool doesn't generate code that will return a dataset, rather it creates code that returns a arrayOfXElement instead. So I had to add a function to my Utils class to convert arrayOfXElement to a dataset. That function is:

public static DataSet ToDataSet(ArrayOfXElement arrayOfXElement)
{
    var strSchema = arrayOfXElement.Nodes[0].ToString();
    var strData = arrayOfXElement.Nodes[1].ToString();
    var strXml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n\t<DataSet>";
    strXml += strSchema + strData;
    strXml += "</DataSet>";

    DataSet ds = new DataSet("TestDataSet");
    ds.ReadXml(new MemoryStream(Encoding.UTF8.GetBytes(strXml)));
    return ds;
}

Executing the function using the arrayOfXElement that the service returns converts the array to a dataset. Hope this helps someone avoid the time it took me to figure this all out.

本文标签: cNET Maui create a reference to WCF Web ServiceStack Overflow