3

背景:VB.NETで記述されたwinformアプリケーションがあります。このアプリケーションは、Webサービスを使用して、ユーザーがさまざまなインタビューを受けるために選択したマーケティング会社に基づいて、さまざまな招待状をユーザーに送信します。winformアプリは、さまざまなテキストボックス、リストボックス、およびドロップダウンリストから文字列値を取得してXMLを作成し、それをAcompServiceClientというWebサービスにプッシュします。

質問:

  • winformデータをwebformasp.netにエクスポートするウィザードまたはサードパーティアプリケーションはありますか、それともすべてのコントロールにwinformアプリと同じ名前空間を使用してaspxページを最初から作成する必要がありますか?
  • AcompServiceClient Webサービスと分離コードvb以外に、これを機能させるには、どのファイルを転送またはセットアップする必要がありますか?(プロジェクトファイルのスクリーンショットを見てください)
  • app.configファイルの一部をコピーして、web.configファイルに適合させる必要がありますか?

私が考えていた:

  • まず、Acomp_Invitation_Form.vbをAComp_Invitation_Web_App.aspx.vbコードビハインドページにコピーすることから始めます。
  • Webサーバーから既存のWebサービスを追加します
  • 同じ名前/IDを使用して、フロントエンドのaspxページにフォーマット、テキストボックス、リストボックス、およびドロップダウンリストを手動で再追加します。

WinFormアプリのスクリーンショットは次のとおりです。

ACOMPスクリーンショット

プロジェクトファイルのスクリーンショットは次のとおりです。

ここに画像の説明を入力してください

これがAcomp_Invitation_Form.vbの私のコードです:

Imports TestClient.aCompService
Imports System.Text
Public Class Form1

Private proxy As New AcompServiceClient
Private Sub stuff()

    Dim splitContractingBundle() As String
    splitContractingBundle = Split(cb2.SelectedItem, "|")
    Dim splitMarketingCompany() As String
    splitMarketingCompany = Split(cb3.SelectedItem, "|")
    Dim strDate As String = System.DateTime.Now.ToString
    Dim strOpData As String = String.Format("{0}~{1}~{2}~{3}~{4}~{5}~{6}~{7}~{8}~{9}~{10}",
                                            Trim(splitMarketingCompany(0)), txtFirstName.Text, "", txtLastName.Text,
                                            txtEmail.Text, txtEmail.Text, "1", strDate,
                                            "Pending", "1/1/1900", Trim(splitContractingBundle(0)))

    Dim int1 As Boolean = proxy.AddContractOpportunity(strOpData, "test", "test")
    txtEmail.Text = ""
    txtFirstName.Text = ""
    txtLastName.Text = ""
    lbCarriers.Items.Clear()
    cb2.Items.Clear()
    cb3.Items.Clear()
    cb2.SelectedItem = ""
    cb3.SelectedText = ""
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    'TODO Add code to validate that all selections that are reaquired are met.
    'ccemail and the additional message are not required
    Dim firstname As String = txtFirstName.Text
    Dim lastname As String = txtLastName.Text
    Dim ccEmail As String = txtccEmail.Text
    Dim sb As New StringBuilder
    sb.AppendLine("<?xml version=""1.0"" encoding=""utf-8""?>")
    sb.AppendLine("<root>")
    sb.AppendLine("<MarketingCompany>")
    sb.AppendLine("<MarketingCompanyName>")
    ''Get Marketing Company Short Name
    Dim splitMC As String() = Split(cb3.SelectedItem, "|")
    Dim MCShort As String = Trim(splitMC(0))
    sb.AppendLine(String.Format("<MCNAme>{0}</MCNAme>", MCShort))
    'sb.AppendLine(String.Format("<MCNAme>{0}</MCNAme>", My.Settings.MarketingCompanyShortName))
    sb.AppendLine(String.Format("<ccEmail>{0}</ccEmail>", txtccEmail.Text))
    sb.AppendLine(String.Format("<emailMessage>{0}</emailMessage>", txtMessage.Text))
    sb.AppendLine(String.Format("<MarketerName>{0}</MarketerName>", txtMarketerName.Text))
    sb.AppendLine("<agent>")
    sb.AppendLine(String.Format("<FirstName>{0}</FirstName>", txtFirstName.Text))
    sb.AppendLine(String.Format("<LastName>{0}</LastName>", txtLastName.Text))
    sb.AppendLine(String.Format("<Email>{0}</Email>", txtEmail.Text))
    sb.AppendLine("<CRMGuid>123456</CRMGuid>")
    Dim spltBundles() As String

    For Each item In cb2.SelectedItems
        If Trim(item) <> "" Then
            spltBundles = Split(item, "|")
            sb.AppendLine("<ContractingOpportunity>")
            sb.AppendLine(String.Format("<Carrier>{0}</Carrier>", Trim(spltBundles(0))))
            sb.AppendLine(String.Format("<ContractingOpportunityName>{0}</ContractingOpportunityName>", Trim(spltBundles(1))))
            sb.AppendLine("</ContractingOpportunity>")
        End If
    Next
    sb.AppendLine("</agent>")
    sb.AppendLine("</MarketingCompanyName>")
    sb.AppendLine(" </MarketingCompany>")
    sb.AppendLine(" </root>")
    Dim xmlStr = sb.ToString
    Dim int1 As Boolean = proxy.AddContractOpportunity(xmlStr.ToString, "test", "test")
    MsgBox("Made It")
End Sub

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    GetCarriers()
    GetMarketingCompanies()
End Sub

Private Sub GetCarriers()
    Try
        Dim ac1 As Array
        ac1 = proxy.GetCarrierNames("test", "test")

        For Each item In ac1
            lbCarriers.Items.Add(String.Format("{0} | {1} | {2}", item.CarrierID, item.CarrierNameLong, item.CarrierNameShort))

        Next
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

End Sub
Private Sub GetMarketingCompanies()
    Try
        Dim ac1 As Array
        ac1 = proxy.GetMarketingCompanyNames("test", "test")

        For Each item In ac1
            cb3.Items.Add(String.Format("{0}   |   {1}", item.MarketingCompanyShort, item.MarketingCompanyName))
        Next
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

Private Sub lbCarriers_LostFocus(sender As Object, e As System.EventArgs) Handles lbCarriers.LostFocus
    Dim splt() As String
    Dim ac1 As Array
    cb2.Items.Clear()

    For Each item In lbCarriers.SelectedItems
        splt = Split(item, "|")
        ac1 = proxy.GetContractingBundles("test", "test", Trim(splt(0)))
        For Each Pitem In ac1
            cb2.Items.Add(Trim(splt(2)) & " | " & Pitem.FormBundleName)
        Next
    Next
End Sub
End Class
4

3 に答える 3

4

簡単な方法には十分注意してください。ASP.NET WebフォームはWindowsフォーム(イベントに接続されたコントロール)に似ているように見えるかもしれませんが、基になるメカニズムは非常に異なります。まだ読んでいない場合は、HTTPのしくみとASP.NETページのライフサイクルを確認することをお勧めします。

于 2011-04-08T15:44:23.433 に答える
2

はい、あなたがやりたい方法は、私がこれを何度も行ってきた方法です。

コードビハインドからメソッドをコピーして、asp.netページのコードビハインドに貼り付けるだけです。一部のメソッドは、asp.netでサポートされていないため互換性がありませんが、プロジェクトをビルドすると、非常に迅速に処理できることがわかります。

WinFormのコントロールとまったく同じ名前のコントロールを使用してWebページを作成します。ビルドするとき、あなたがしなければならないのはあなたのエラーを修正することだけであり、あなたはあなたの道を進んでいます。

何らかのサービスに接続しているようですので、もちろんそれを参照する必要があります。

于 2011-04-08T15:26:46.167 に答える
1

ええ、それが一般的な考え方です。AcompServiceClientステートレスWeb環境での使用に関連する懸念事項には特に注意を払います。それが何であるか、それがどのように機能するか、またはそれがどのように消費されるかについて何も知らずに、それをどのように使用しているかを再考する必要があるかどうかを言うのは難しいです。

ステートフル環境での実行に依存する他のことをしているようには見えません。さまざまなテキストボックスから文字列値を取得してXMLを作成し、それをサービスにプッシュするだけです。これらはすべてスムーズに移植されるはずです。クライアント側の検証ルールを追加することを検討することもできますが、それ以外は簡単です。

DropDownListの設定方法を変更する必要があります。これらは、winフォームとWebフォームで少し異なります。Webフォームのデータソースにバインドする必要があります。

于 2011-04-08T15:26:19.020 に答える