user7205862
user7205862

Reputation:

Visual Studio: How do I integrate a wsdl into a web service?

I need to create an .exe (standalone and without IIS) that contains a web interface.

An existing WSDL was converted into VB.NET code. I have now inserted the vb.net-File, but without .config file.

Incorrectly, the interface is not displayed even though it has been referenced. If I call "http://localhost/?WSDL", the following is displayed:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:i0="http://FOO.bar.example.net" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://tempuri.org/" name="FOO_impl">
    <wsdl:import location="http://localhost:8000/?wsdl=wsdl0" namespace="http://FOO.bar.example.net"/>
    <wsdl:types/>
    <wsdl:service name="FOO_impl"/>
</wsdl:definitions>

The original WSDL file has call options that are missing here. Did I forget to reference something? How should I incorporate that?

Module1.vb:

Imports System.Collections.Generic
Imports System.ServiceModel
Imports System.ServiceModel.Description
Imports System.ServiceModel.Web
Imports System.Text

Module Module1

    '"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\SvcUtil.exe" "C:\Sourcen\trunk\Entwicklung\VBProgramme.NET\TOOLS\ServerKOS\Client - Variante mittels WebReference\KOSService.wsdl"  /language:VB /syncOnly
    Sub Main()
        'https://learn.microsoft.com/de-de/dotnet/framework/wcf/feature-details/how-to-create-a-basic-wcf-web-http-service#to-host-the-service
        Dim host As ServiceHost = New ServiceHost(GetType(KOS_impl), New Uri("http://localhost:8000/"))
        Try
            Dim ep As ServiceEndpoint = host.AddServiceEndpoint(GetType(FOOPortType), New WebHttpBinding(), "")

            Dim smb As ServiceMetadataBehavior = New ServiceMetadataBehavior()
            smb.HttpGetEnabled = True
            host.Description.Behaviors.Add(smb)

            host.Open()
            Using cf As New ChannelFactory(Of FOOPortType)(New WebHttpBinding(), "http://localhost:8000")

                cf.Endpoint.Behaviors.Add(New WebHttpBehavior())

            End Using

            Console.WriteLine("Press <ENTER> to terminate")
            Console.ReadLine()

            host.Close()
        Catch cex As CommunicationException
            Console.WriteLine("An exception occurred: {0}", cex.Message)
            host.Abort()
        End Try
    End Sub


End Module

FOO_impl.vb:

Public Class FOO_impl
    Implements FOOPortType

    Public Function FOOAufruf(request As FOOAufrufRequest) As FOOAufrufResponse Implements FOOPortType.FOOAufruf
        Dim tmpFooanfrage As New FOOAnfrage
        Dim tmp As New FOOAufrufResponse(tmpFooanfrage)
        Return tmp
    End Function

End Class

FOO.vb (generated through SvcUtil.exe):

'------------------------------------------------------------------------------
' <auto-generated>
'     Dieser Code wurde von einem Tool generiert.
'     Laufzeitversion:4.0.30319.42000
'
'     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
'     der Code erneut generiert wird.
' </auto-generated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On



<System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0"),  _
 System.ServiceModel.ServiceContractAttribute([Namespace]:="http://FOO.bar.example.net", ConfigurationName:="FOOPortType")>  _
Public Interface FOOPortType
    
    'CODEGEN: Der Nachrichtenvertrag wird generiert, da der Vorgang FOOAufruf weder in RPC noch in einem Dokument eingeschlossen ist.
    <System.ServiceModel.OperationContractAttribute(Action:="#abc", ReplyAction:="*"),  _
     System.ServiceModel.XmlSerializerFormatAttribute()>  _
    Function FOOAufruf(ByVal request As FOOAufrufRequest) As FOOAufrufResponse
End Interface

'''<remarks/>
<System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.7.3081.0"),  _
 System.SerializableAttribute(),  _
 System.Diagnostics.DebuggerStepThroughAttribute(),  _
 System.ComponentModel.DesignerCategoryAttribute("code"),  _
 System.Xml.Serialization.XmlTypeAttribute([Namespace]:="http://FOO.bar.example.net")>  _
Partial Public Class FOOAnfrage
    
    Private versionField As String
    
    '''<remarks/>
    <System.Xml.Serialization.XmlElementAttribute(Order:=0)>  _
    Public Property Version() As String
        Get
            Return Me.versionField
        End Get
        Set
            Me.versionField = value
        End Set
    End Property
End Class

<System.Diagnostics.DebuggerStepThroughAttribute(),  _
 System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0"),  _
 System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced),  _
 System.ServiceModel.MessageContractAttribute(IsWrapped:=false)>  _
Partial Public Class FOOAufrufRequest
    
    <System.ServiceModel.MessageBodyMemberAttribute([Namespace]:="http://FOO.bar.example.net", Order:=0)>  _
    Public FOOInput As FOOAnfrage
    
    Public Sub New()
        MyBase.New
    End Sub
    
    Public Sub New(ByVal FOOInput As FOOAnfrage)
        MyBase.New
        Me.FOOInput = FOOInput
    End Sub
End Class

<System.Diagnostics.DebuggerStepThroughAttribute(),  _
 System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0"),  _
 System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced),  _
 System.ServiceModel.MessageContractAttribute(IsWrapped:=false)>  _
Partial Public Class FOOAufrufResponse
    
    <System.ServiceModel.MessageBodyMemberAttribute([Namespace]:="http://FOO.bar.example.net", Order:=0)>  _
    Public FOOOutput As FOOAnfrage
    
    Public Sub New()
        MyBase.New
    End Sub
    
    Public Sub New(ByVal FOOOutput As FOOAnfrage)
        MyBase.New
        Me.FOOOutput = FOOOutput
    End Sub
End Class

<System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")>  _
Public Interface FOOPortTypeChannel
    Inherits FOOPortType, System.ServiceModel.IClientChannel
End Interface

<System.Diagnostics.DebuggerStepThroughAttribute(),  _
 System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")>  _
Partial Public Class FOOPortTypeClient
    Inherits System.ServiceModel.ClientBase(Of FOOPortType)
    Implements FOOPortType
    
    Public Sub New()
        MyBase.New
    End Sub
    
    Public Sub New(ByVal endpointConfigurationName As String)
        MyBase.New(endpointConfigurationName)
    End Sub
    
    Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String)
        MyBase.New(endpointConfigurationName, remoteAddress)
    End Sub
    
    Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As System.ServiceModel.EndpointAddress)
        MyBase.New(endpointConfigurationName, remoteAddress)
    End Sub
    
    Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding, ByVal remoteAddress As System.ServiceModel.EndpointAddress)
        MyBase.New(binding, remoteAddress)
    End Sub
    
    <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
    Function FOOPortType_FOOAufruf(ByVal request As FOOAufrufRequest) As FOOAufrufResponse Implements FOOPortType.FOOAufruf
        Return MyBase.Channel.FOOAufruf(request)
    End Function
    
    Public Function FOOAufruf(ByVal FOOInput As FOOAnfrage) As FOOAnfrage
        Dim inValue As FOOAufrufRequest = New FOOAufrufRequest()
        inValue.FOOInput = FOOInput
        Dim retVal As FOOAufrufResponse = CType(Me,FOOPortType).FOOAufruf(inValue)
        Return retVal.FOOOutput
    End Function
End Class

Upvotes: 0

Views: 477

Answers (1)

Theobald Du
Theobald Du

Reputation: 1024

The reason there is no configuration file is that you use the restapi wcf service, which supports http request to call the service, and is not suitable for calling the service by generating proxy classes. You can modify the binding to basichttpbinding or use httpclient to call the webhttpbinding service . This is the reference:HttpClient Class

Upvotes: 0

Related Questions