Skip to content

Commit 12c60d1

Browse files
damabeBillWagner
authored andcommitted
SEOImages: User Story 1463880, Part 4 (#11115)
* Image updates. * Image updates. * Update file names, alt text, and file directories. * Update file names, alt text, and file directories. * Update file names, alt text, and file directories. * Update file names, alt text, and file directories. * Update file names, alt text, and file directories. * Update file names, alt text, and file directories. * Update file names, alt text, and file directories. * Update file names, alt text, and file directories. * Update file names, alt text, and file directories.
1 parent 5f6d490 commit 12c60d1

31 files changed

+26
-32
lines changed

docs/framework/interop/deploying-an-interop-application.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ An interop application typically includes a .NET client assembly, one or more in
3232
### Private Assemblies
3333
To install an assembly to be used privately, both the application executable and the interop assembly that contains imported COM types must be installed in the same directory structure. The following illustration shows an unsigned interop assembly to be used privately by Client1.exe and Client2.exe, which reside in separate application directories. The interop assembly, which is called LOANLib.dll in this example, is installed twice.
3434

35-
![Directory structure and Windows registry](media/comdeployprivate.gif "comdeployprivate")
36-
Directory structure and registry entries for a private deployment
35+
![Directory structure and Windows registry](./media/deploying-an-interop-application/com-private-deployment.gif "Directory structure and registry entries for a private deployment")
3736

3837
All COM components associated with the application must be installed in the Windows registry. If Client1.exe and Client2.exe in the illustration are installed on different computers, you must register the COM components on both computers.
3938

docs/framework/interop/interop-marshaling.md

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ ms.author: "ronpet"
3838

3939
Both platform invoke and COM interop use interop marshaling to accurately move method arguments between caller and callee and back, if required. As the following illustration shows, a platform invoke method call flows from managed to unmanaged code and never the other way, except when [callback functions](callback-functions.md) are involved. Even though platform invoke calls can flow only from managed to unmanaged code, data can flow in both directions as input or output parameters. COM interop method calls can flow in either direction.
4040

41-
![Platform invoke](./media/interopmarshaling.png "interopmarshaling")
42-
Platform invoke and COM interop call flow
41+
![Platform invoke](./media/interop-marshaling/interop-marshaling-invoke-and-com.png "Platform invoke and COM interop call flow")
4342

4443
At the lowest level, both mechanisms use the same interop marshaling service; however, certain data types are supported exclusively by COM interop or platform invoke. For details, see [Default Marshaling Behavior](default-marshaling-behavior.md).
4544

@@ -61,8 +60,7 @@ Platform invoke and COM interop call flow
6160

6261
Because the client and server are in the same apartment, the interop marshaling service automatically handles all data marshaling. The following illustration shows the interop marshaling service operating between managed and unmanaged heaps within the same COM-style apartment.
6362

64-
![Interop marshaling](./media/interopheap.gif "interopheap")
65-
Same-apartment marshaling process
63+
![Interop marshaling between managed and unmanaged heaps](./media/interop-marshaling/interop-heaps-managed-and-unmanaged.gif "Same-apartment marshaling process")
6664

6765
If you plan to export a managed server, be aware that the COM client determines the apartment of the server. A managed server called by a COM client initialized in an MTA must ensure thread safety.
6866

@@ -78,8 +76,7 @@ Same-apartment marshaling process
7876

7977
When a managed client and unmanaged server are in the same apartment, the interop marshaling service handles all data marshaling. However, when client and server are initialized in different apartments, COM marshaling is also required. The following illustration shows the elements of a cross-apartment call.
8078

81-
![COM marshaling](./media/singleprocessmultapt.gif "singleprocessmultapt")
82-
Cross-apartment call between a .NET client and COM object
79+
![COM marshaling](./media/interop-marshaling/single-process-across-multi-apartment.gif "Cross-apartment call between a .NET client and COM object")
8380

8481
For cross-apartment marshaling, you can do the following:
8582

@@ -104,14 +101,12 @@ Cross-apartment call between a .NET client and COM object
104101

105102
The following illustration shows how interop marshaling and COM marshaling provide communications channels across process and host boundaries.
106103

107-
![COM marshaling](./media/interophost.gif "interophost")
108-
Cross-process marshaling
104+
![COM marshaling](./media/interop-marshaling/interop-and-com-marshaling.gif "Cross-process marshaling")
109105

110106
### Preserving Identity
111107
The common language runtime preserves the identity of managed and unmanaged references. The following illustration shows the flow of direct unmanaged references (top row) and direct managed references (bottom row) across process and host boundaries.
112108

113-
![COM callable wrapper and runtime callable wrapper](./media/interopdirectref.gif "interopdirectref")
114-
Reference passing across process and host boundaries
109+
![COM callable wrapper and runtime callable wrapper](./media/interop-marshaling/interop-direct-ref-across-process.gif "Reference passing across process and host boundaries")
115110

116111
In this illustration:
117112

@@ -127,7 +122,7 @@ Reference passing across process and host boundaries
127122
### Managed Remoting
128123
The runtime also provides managed remoting, which you can use to establish a communications channel between managed objects across process and host boundaries. Managed remoting can accommodate a firewall between the communicating components, as the following illustration shows.
129124

130-
![SOAP or TcpChannel](./media/interopremotesoap.gif "interopremotesoap")
125+
![SOAP or TcpChannel](./media/interop-marshaling/interop-remote-soap-or-tcp.gif "Remote calls across firewalls using SOAP or the TcpChannel class")
131126
Remote calls across firewalls using SOAP or the TcpChannel class
132127

133128
Some unmanaged calls can be channeled through SOAP, such as the calls between serviced components and COM.

docs/framework/wcf/feature-details/creating-a-long-running-workflow-service.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@ This topic describes how to create a long-running workflow service. Long running
3939

4040
1. Under **Start Action** select **Specific Page** and specify `Service1.xamlx`.
4141

42-
![Workflow Service Project Web Properties](../../../../docs/framework/wcf/feature-details/media/startaction.png "StartAction")
42+
![Workflow Service Project Web Properties](./media/creating-a-long-running-workflow-service/start-action-specific-page-option.png "Create the web hosted workflow service - Specific Page option")
4343

4444
2. Under **Servers** select **Use Local IIS Web server**.
4545

46-
![Local Web Server Settings](../../../../docs/framework/wcf/feature-details/media/uselocalwebserver.png "UseLocalWebServer")
46+
![Local Web Server Settings](./media/creating-a-long-running-workflow-service/use-local-web-server.png "Create the web hosted workflow service - Use Local IIS Web Server option")
4747

4848
> [!WARNING]
4949
> You must run Visual Studio 2012 in administrator mode to make this setting.
@@ -57,73 +57,73 @@ This topic describes how to create a long-running workflow service. Long running
5757
> [!NOTE]
5858
> If CorrelationHandle is not in the Variable Type drop-down, select **Browse for types** from the drop-down. Type CorrelationHandle in the **Type name** box, select CorrelationHandle from the listbox and click **OK**.
5959
60-
![Add Variables](../../../../docs/framework/wcf/feature-details/media/addvariables.gif "AddVariables")
60+
![Add Variables](./media/creating-a-long-running-workflow-service/add-variables-sequential-service-activity.gif "Add variables to the Sequential Service activity.")
6161

6262
6. Drag and drop a **ReceiveAndSendReply** activity template into the **Sequential Service** activity. This set of activities will receive a message from a client and send a reply back.
6363

6464
1. Select the **Receive** activity and set the properties highlighted in the following illustration.
6565

66-
![Set Receive Activity Properties](../../../../docs/framework/wcf/feature-details/media/setreceiveproperties.png "SetReceiveProperties")
66+
![Set Receive Activity Properties](./media/creating-a-long-running-workflow-service/set-receive-activity-properties.png "Set the Receive activity properties.")
6767

6868
The DisplayName property sets the name displayed for the Receive activity in the designer. The ServiceContractName and OperationName properties specify the name of the service contract and operation that are implemented by the Receive activity. For more information about how contracts are used in Workflow services see [Using Contracts in Workflow](../../../../docs/framework/wcf/feature-details/using-contracts-in-workflow.md).
6969

7070
2. Click the **Define...** link in the **ReceiveStartOrder** activity and set the properties shown in the following illustration. Notice that the **Parameters** radio button is selected, a parameter named `p_customerName` is bound to the `customerName` variable. This configures the **Receive** activity to receive some data and bind that data to local variables.
7171

72-
![Setting the data received by the Receive activity](../../../../docs/framework/wcf/feature-details/media/setreceivecontent.png "SetReceiveContent")
72+
![Setting the data received by the Receive activity](./media/creating-a-long-running-workflow-service/set-properties-for-receive-content.png "Set the properties for data received by the Receive activity.")
7373

7474
3. Select The **SendReplyToReceive** activity and set the highlighted property shown in the following illustration.
7575

76-
![Setting the properties of the SendReply activity](../../../../docs/framework/wcf/feature-details/media/setreplyproperties.png "SetReplyProperties")
76+
![Setting the properties of the SendReply activity](./media/creating-a-long-running-workflow-service/set-properties-for-reply-activities.png "SetReplyProperties")
7777

7878
4. Click the **Define...** link in the **SendReplyToStartOrder** activity and set the properties shown in the following illustration. Notice that the **Parameters** radio button is selected; a parameter named `p_orderId` is bound to the `orderId` variable. This setting specifies that the SendReplyToStartOrder activity will return a value of type string to the caller.
7979

80-
![Configuring the SendReply activity content data](../../../../docs/framework/wcf/feature-details/media/setreplycontent.png "SetReplyContent")
80+
![Configuring the SendReply activity content data](./media/creating-a-long-running-workflow-service/setreplycontent-for-sendreplytostartorder-activity.png "Configure setting for SetReplyToStartOrder activity.")
8181

8282
5. Drag and drop an Assign activity in between the **Receive** and **SendReply** activities and set the properties as shown in the following illustration:
8383

84-
![Adding an assign activity](../../../../docs/framework/wcf/feature-details/media/addassign.png "AddAssign")
84+
![Adding an assign activity](./media/creating-a-long-running-workflow-service/add-an-assign-activity.png "Add an assign activity.")
8585

8686
This creates a new order ID and places the value in the orderId variable.
8787

8888
6. Select the **ReplyToStartOrder** activity. In the properties window click the ellipsis button for **CorrelationInitializers**. Select the **Add initializer** link, enter `orderIdHandle` in the Initializer text box, select Query correlation initializer for the Correlation type, and select p_orderId under the XPATH Queries dropdown box. These settings are shown in the following illustration. Click **OK**. This initializes a correlation between the client and this instance of the workflow service. When a message containing this order ID is received it is routed to this instance of the workflow service.
8989

90-
![Adding a correlation initializer](../../../../docs/framework/wcf/feature-details/media/addcorrelationinitializers.png "AddCorrelationInitializers")
90+
![Adding a correlation initializer](./media/creating-a-long-running-workflow-service/add-correlationinitializers.png "Add a correlation initializer.")
9191

9292
7. Drag and drop another **ReceiveAndSendReply** activity to the end of the workflow (outside the **Sequence** containing the first **Receive** and **SendReply** activities). This will receive the second message sent by the client and respond to it.
9393

9494
1. Select the **Sequence** that contains the newly added **Receive** and **SendReply** activities and click the **Variables** button. Add the variable highlighted in the following illustration:
9595

96-
![Adding new variables](../../../../docs/framework/wcf/feature-details/media/addorderitemidvariable.png "AddOrderItemIdVariable")
96+
![Adding new variables](./media/creating-a-long-running-workflow-service/add-the-itemid-variable.png "Add the ItemId variable.")
9797

9898
2. Select the **Receive** activity and set the properties shown in the following illustration:
9999

100-
![Set the Receive acitivity properties](../../../../docs/framework/wcf/feature-details/media/setreceiveproperties2.png "SetReceiveProperties2")
100+
![Set the Receive acitivity properties](./media/creating-a-long-running-workflow-service/set-receive-activities-properties.png "Set the Receive activities properties.")
101101

102102
3. Click the **Define...** link in the **ReceiveAddItem** activity and add the parameters shown in the following illustration:This configures the receive activity to accept two parameters, the order ID and the ID of the item being ordered.
103103

104-
![Specifying parameters for the second receive](../../../../docs/framework/wcf/feature-details/media/addreceive2parameters.png "AddReceive2Parameters")
104+
![Specifying parameters for the second receive](./media/creating-a-long-running-workflow-service/add-receive-two-parameters.png "Configure the receive activity to receive two parameters.")
105105

106106
4. Click the **CorrelateOn** ellipsis button and enter `orderIdHandle`. Under **XPath Queries**, click the drop down arrow and select `p_orderId`. This configures the correlation on the second receive activity. For more information about correlation see [Correlation](../../../../docs/framework/wcf/feature-details/correlation.md).
107107

108-
![Setting the CorrelatesOn property](../../../../docs/framework/wcf/feature-details/media/correlateson.png "CorrelatesOn")
108+
![Setting the CorrelatesOn property](./media/creating-a-long-running-workflow-service/correlateson-setting.png "Set the CorrelatesOn property.")
109109

110110
5. Drag and drop an **If** activity immediately after the **ReceiveAddItem** activity. This activity acts just like an if statement.
111111

112112
1. Set the **Condition** property to `itemId=="Zune HD" (itemId="Zune HD" for Visual Basic)`
113113

114114
2. Drag and drop an **Assign** activity in to the **Then** section and another into the **Else** section set the properties of the **Assign** activities as shown in the following illustration.
115115

116-
![Assigning the result of the service call](../../../../docs/framework/wcf/feature-details/media/resultassign.png "ResultAssign")
116+
![Assigning the result of the service call](./media/creating-a-long-running-workflow-service/assign-result-of-service-call.png "Assign the result of the service call.")
117117

118118
If the condition is `true` the **Then** section will be executed. If the condition is `false` the **Else** section is executed.
119119

120120
3. Select the **SendReplyToReceive** activity and set the **DisplayName** property shown in the following illustration.
121121

122-
![Setting the SendReply activity properties](../../../../docs/framework/wcf/feature-details/media/setreply2properties.png "SetReply2Properties")
122+
![Setting the SendReply activity properties](./media/creating-a-long-running-workflow-service/send-reply-activity-property.png "Set the SendReply activity property.")
123123

124124
4. Click the **Define ...** link in the **SetReplyToAddItem** activity and configure it as shown in the following illustration. This configures the **SendReplyToAddItem** activity to return the value in the `orderResult` variable.
125125

126-
![Setting the data binding for the SendReply activit](../../../../docs/framework/wcf/feature-details/media/replytoadditemcontent.gif "ReplyToAddItemContent")
126+
![Setting the data binding for the SendReply activity](./media/creating-a-long-running-workflow-service/set-property-for-sendreplytoadditem.gif "Set property for SendReplyToAddItem activity.")
127127

128128
8. Open the web.config file and add the following elements in the \<behavior> section to enable workflow persistence.
129129

0 commit comments

Comments
 (0)